MeshStandardMaterial — это материал в библиотеке
Three.js, реализующий физически корректное рендеринг-подобие (PBR,
Physically Based Rendering). Он предназначен для реалистичного
отображения объектов с учетом взаимодействия света и поверхности.
Основное отличие от MeshBasicMaterial и
MeshLambertMaterial заключается в поддержке
металличности, шероховатости и
правильного отражения света, что позволяет создавать более натуральные
сцены.
Ключевые свойства материала:
color — базовый цвет поверхности, задается как
THREE.Color.metalness — степень металлическости материала. Значение
0 соответствует диэлектрику, 1 — металлу.roughness — шероховатость поверхности. Значение 0 дает
зеркальное отражение, 1 — рассеянное.map — текстура для базового цвета.metalnessMap — текстура, влияющая на распределение
металлических участков.roughnessMap — текстура, задающая вариации
шероховатости.normalMap — карта нормалей для имитации
микрорельефа.envMap — карта окружающей среды для отражений.aoMap — карта амбиентной окклюзии для теней в
углублениях.Металличность (metalness) контролирует, насколько
материал ведет себя как металл:
Шероховатость (roughness) управляет рассеянием
отраженного света:
Эти два параметра вместе создают основу для реалистичного PBR.
MeshStandardMaterial позволяет применять несколько типов
текстур:
Базовый цвет (map) Задает основной
цвет материала. Поддерживает как однородный цвет, так и изображения с
деталями.
Карта металлическости
(metalnessMap) Черно-белая текстура: белый цвет =
полностью металлический участок, черный = диэлектрик.
Карта шероховатости (roughnessMap)
Черно-белая карта: черный = гладкая поверхность, белый = максимально
шероховатая.
Карта нормалей (normalMap)
Имитирует микрорельеф без изменения геометрии. Эффективно для деталей
вроде царапин или швов.
Карта амбиентной окклюзии (aoMap)
Затемняет углубления и области, недоступные прямому свету. Увеличивает
ощущение объема.
Карта отражений (envMap)
Используется для имитации окружающей среды. Может быть статическим
кубическим или динамическим.
Пример создания материала:
const textureLoader = new THREE.TextureLoader();
const material = new THREE.MeshStandardMaterial({
color: 0xffffff,
metalness: 0.7,
roughness: 0.2,
map: textureLoader.load('textures/albedo.jpg'),
metalnessMap: textureLoader.load('textures/metalness.jpg'),
roughnessMap: textureLoader.load('textures/roughness.jpg'),
normalMap: textureLoader.load('textures/normal.jpg'),
aoMap: textureLoader.load('textures/ao.jpg'),
envMap: scene.environment
});
Этот материал позволяет создать поверхность с реалистичными отражениями, световыми бликами и микродеталями, соответствующими физическим свойствам реальных материалов.
MeshStandardMaterial работает с физически
корректным освещением:
DirectionalLight,
PointLight, SpotLight,
AmbientLight.Использование текстур Карты высокого разрешения дают реализм, но увеличивают нагрузку GPU. Использовать mipmap и компрессию текстур.
Экономия отражений Статические envMap экономят ресурсы по сравнению с динамическими кубическими картами.
AO и нормали Для мелких деталей лучше комбинировать карты нормалей и AO, чем увеличивать геометрию.
Управление металличностью и шероховатостью Значения между 0 и 1 должны быть осмысленными. Полностью черная или белая карта редко выглядит естественно без комбинирования с PBR-цветом.
MeshStandardMaterial совместим с:
bloom, SSAO,
tone mapping).PMREMGenerator.glTF и USDZ.onBeforeCompile для кастомизации
отражений и блеска.Эта совместимость делает материал универсальным для современных веб-приложений с 3D-графикой.