MeshLambertMaterial — это материал в библиотеке
Three.js, предназначенный для реализации диффузного освещения. Его
ключевое отличие от MeshBasicMaterial заключается в том,
что он учитывает источник света в сцене, создавая естественное затенение
поверхностей без сложного расчёта отражений и бликов. Этот материал
идеально подходит для объектов, где требуется реалистичное распределение
света, но не критичны зеркальные отражения.
Основные свойства:
color — базовый цвет объекта. Может задаваться в
формате 0xffffff или через строку 'red'.map — текстура, применяемая к поверхности.lightMap — текстура освещённости для имитации
статического освещения.emissive — цвет, который объект испускает независимо от
освещения.emissiveIntensity — интенсивность эмиссивного
света.vertexColors — если включено, цвет вершин будет
учитываться при отрисовке.Для использования MeshLambertMaterial необходимо создать
геометрию и указать материал:
const geometry = new THREE.BoxGeometry(2, 2, 2);
const material = new THREE.MeshLambertMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);
Здесь cube реагирует на источники света в сцене. Без
освещения объект будет выглядеть тёмным, так как диффузное затенение
требует внешнего источника света.
MeshLambertMaterial корректно отображает следующие типы
света:
Пример подключения освещения:
const ambientLight = new THREE.AmbientLight(0x404040);
scene.add(ambientLight);
const directionalLight = new THREE.DirectionalLight(0xffffff, 1);
directionalLight.position.set(5, 10, 7.5);
scene.add(directionalLight);
intensity)
напрямую влияет на яркость материала.color) задаёт оттенок
затенённых областей.emissive позволяет материалу «светиться» независимо от
внешнего освещения, что полезно для имитации экранов, ламп и
декоративных элементов. Текстуры (map) накладываются на
диффузный цвет и при необходимости комбинируются с lightMap
для предрассчитанного освещения.
const texture = new THREE.TextureLoader().load('texture.jpg');
const material = new THREE.MeshLambertMaterial({
map: texture,
emissive: 0x111111,
color: 0xffffff
});
Если включён vertexColors, то итоговый цвет
рассчитывается как комбинация цвета вершин и освещения:
const geometry = new THREE.BoxGeometry(2, 2, 2);
geometry.setAttribute('color', new THREE.Float32BufferAttribute([
1,0,0, 0,1,0, 0,0,1, 1,1,0,
1,0,1, 0,1,1, 0.5,0.5,0.5, 1,1,1
], 3));
const material = new THREE.MeshLambertMaterial({ vertexColors: true });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);
MeshLambertMaterial не поддерживает зеркальные
отражения и блеск. Для них используется MeshPhongMaterial
или MeshStandardMaterial.Материал широко используется для:
emissive и ambientLight.MeshPhongMaterial или
MeshStandardMaterial.lightMap позволяет уменьшить вычисления
реального освещения.AmbientLight и DirectionalLight
создаёт естественный баланс между общим светом и тенями.MeshLambertMaterial — ключевой инструмент для создания
визуально приятного диффузного освещения в Three.js, позволяющий легко
управлять цветом, текстурами и световыми эффектами без высоких затрат
производительности.