Карта окружающего затенения (Ambient Occlusion Map, aoMap) используется для добавления реалистичной глубины объектам в 3D-сцене. Она моделирует эффект рассеянного света, создавая тёмные зоны в углублениях и щелях, где свет практически не проникает. В Three.js это мощный инструмент для улучшения визуального качества без сложных расчётов глобального освещения.
В Three.js карта окружающего затенения применяется
через свойство aoMap материала, чаще всего
MeshStandardMaterial или MeshPhysicalMaterial.
Для корректного отображения необходимо также указать
aoMapIntensity, которое регулирует силу эффекта:
const textureLoader = new THREE.TextureLoader();
const aoTexture = textureLoader.load('textures/aoMap.png');
const material = new THREE.MeshStandardMaterial({
color: 0xffffff,
map: textureLoader.load('textures/diffuse.jpg'),
aoMap: aoTexture,
aoMapIntensity: 1.0
});
Ключевые моменты:
aoMap принимает чёрно-белую текстуру,
где белый цвет соответствует полностью освещённым областям, а чёрный –
полностью затенённым.aoMapIntensity — число от 0 до бесконечности, влияющее
на яркость эффекта. Значение по умолчанию: 1.Для корректной работы aoMap объект должен иметь
вторую UV-развертку (uv2). Первая UV-развертка используется
для map (текстуры цвета), вторая – для карты AO. Если
объект импортирован из стороннего 3D-редактора, необходимо убедиться,
что UV2 присутствует. В Three.js её можно создать с помощью:
geometry.setAttribute('uv2', new THREE.BufferAttribute(geometry.attributes.uv.array, 2));
Это создаёт копию первой UV-развертки и присваивает её для использования aoMap.
aoMap взаимодействует с другими картами материала:
map) — основной цвет
поверхности.При комбинировании эффект окружения усиливает реализм, делая щели и углубления естественно затемнёнными.
const material = new THREE.MeshStandardMaterial({
map: textureLoader.load('textures/diffuse.jpg'),
aoMap: textureLoader.load('textures/aoMap.png'),
roughnessMap: textureLoader.load('textures/roughness.jpg'),
metalnessMap: textureLoader.load('textures/metalness.jpg'),
aoMapIntensity: 0.7
});
aoMap особенно эффективна для:
Пример интеграции в сцену с освещением:
const geometry = new THREE.BoxGeometry(1, 1, 1);
geometry.setAttribute('uv2', new THREE.BufferAttribute(geometry.attributes.uv.array, 2));
const material = new THREE.MeshStandardMaterial({
color: 0xffffff,
map: textureLoader.load('textures/box_diffuse.jpg'),
aoMap: textureLoader.load('textures/box_ao.jpg'),
aoMapIntensity: 1.2
});
const mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
const light = new THREE.DirectionalLight(0xffffff, 1);
light.position.set(5, 10, 7.5);
scene.add(light);
Для повышения реализма aoMap можно комбинировать с:
Эта комбинация позволяет добиться визуализации, близкой к фотореализму, без использования дорогостоящих расчётов глобального освещения.
Эта система даёт гибкий инструмент для создания детализированных и выразительных сцен в Three.js, сохраняя при этом оптимизированную производительность.