MeshPhysicalMaterial в Three.js представляет собой
расширение MeshStandardMaterial и служит для реализации
более сложного физически корректного рендеринга (Physically Based
Rendering, PBR). Основная цель — дать возможность создавать материалы,
имитирующие реальное поведение света при взаимодействии с различными
поверхностями, включая металлы, пластик, стекло и другие сложные
материалы.
color Определяет основной цвет
материала. При физически корректном рендеринге цвет влияет на отражение
и рассеивание света.
roughness Коэффициент шероховатости
поверхности.
0 — идеально гладкая зеркальная
поверхность.1 — полностью рассеянная поверхность.metalness Определяет металлические
свойства материала.
0 — неметаллическая поверхность, отражение зависит от
цвета.1 — металлическая поверхность, отражение полностью
цветное.clearcoat и
clearcoatRoughness Эти свойства позволяют
добавлять дополнительный слой лака на поверхность.
clearcoat задаёт интенсивность лакированного слоя.clearcoatRoughness управляет шероховатостью этого
слоя.reflectivity Влияет на силу отражения
для неметаллических материалов.
transmission Позволяет создавать
прозрачные материалы с эффектом преломления света. Для полноценного
стеклянного эффекта требуется включение
transparent: true.
ior (Index of Refraction) Показатель
преломления для прозрачных материалов, например, для стекла
(1.5) или воды (1.33).
sheen и sheenRoughness
Добавляют тонкий блеск, характерный для тканей и некоторых
пластмасс.
MeshPhysicalMaterial поддерживает множество карт,
которые влияют на физические свойства поверхности:
map — базовая цветовая текстура.metalnessMap — задаёт металлическую
составляющую по пикселям.roughnessMap — управляет
шероховатостью в разных точках.normalMap — имитирует микрорельеф
поверхности.clearcoatMap — локальное влияние
лака.clearcoatRoughnessMap — локальная
шероховатость лакированного слоя.sheenColorMap и
sheenRoughnessMap — управление блеском ткани.alphaMap — маска прозрачности.Использование этих текстур позволяет создавать высокореалистичные материалы с различными физическими свойствами на одной модели.
const material = new THREE.MeshPhysicalMaterial({
color: 0x555555,
metalness: 1,
roughness: 0.2,
clearcoat: 1,
clearcoatRoughness: 0.1
});
const glassMaterial = new THREE.MeshPhysicalMaterial({
color: 0xffffff,
metalness: 0,
roughness: 0,
transmission: 1,
thickness: 0.5,
ior: 1.5,
transparent: true
});
const fabricMaterial = new THREE.MeshPhysicalMaterial({
color: 0x8833aa,
roughness: 0.6,
metalness: 0,
sheen: 1,
sheenRoughness: 0.3
});
MeshPhysicalMaterial сильно зависит от освещения и
окружения. Использование HDRI карт (environment maps)
или cube maps значительно повышает реализм отражений и
преломления.
envMapIntensity регулирует силу
отражений от окружения. Комбинация PBR материалов с добавлением
точечных, направленных и глобальных источников света создаёт
сложные визуальные эффекты: мягкие отражения, цветные блики и
прозрачность.
MeshPhysicalMaterial требует больше вычислительных
ресурсов по сравнению с MeshStandardMaterial из-за
дополнительных слоёв, прозрачности и сложных отражений. Для
оптимизации:
Эффекты, такие как bloom, SSAO, depth-of-field, и tone mapping, усиливают визуальную реалистичность материалов.
MeshPhysicalMaterial является инструментом для создания
максимально реалистичных PBR материалов в Three.js, предоставляя гибкий
контроль над свойствами поверхности, отражениями, прозрачностью и слоями
блеска. Сочетание текстур, освещения и физических параметров позволяет
моделировать любые поверхности — от матового пластика до стеклянных
объектов с преломлением и тканевых поверхностей с тонким сиянием.