В библиотеке Three.js физически корректное рендеринг (Physically Based Rendering, PBR) реализуется через материалы типа MeshStandardMaterial и MeshPhysicalMaterial. Эти материалы позволяют задавать свойства поверхности объектов с высокой степенью реализма. Две ключевые карты, определяющие внешний вид поверхности, — это roughnessMap и metalnessMap.
Roughness описывает, насколько поверхность рассеивает отражённый свет. Значение варьируется от 0.0 (гладкая, зеркальная поверхность) до 1.0 (полностью шероховатая, матовая поверхность).
Пример использования:
const textureLoader = new THREE.TextureLoader();
const roughnessTexture = textureLoader.load('textures/roughness_map.jpg');
const material = new THREE.MeshStandardMaterial({
color: 0xffffff,
roughness: 1.0,
roughnessMap: roughnessTexture
});
В этом примере roughnessMap задаёт вариации шероховатости по поверхности модели, позволяя реалистично отображать участки с глянцем и матовыми областями на одной и той же геометрии.
Metalness определяет, насколько поверхность ведёт себя как металл. Значение колеблется от 0.0 (неметаллическая поверхность) до 1.0 (полностью металлическая).
Пример использования:
const metalnessTexture = textureLoader.load('textures/metalness_map.jpg');
const material = new THREE.MeshStandardMaterial({
color: 0xffffff,
metalness: 1.0,
metalnessMap: metalnessTexture
});
Карта металличности позволяет локально задавать металлические участки на объекте, например, сделать рамку металлической, а остальную поверхность — пластиковой.
Для максимальной реалистичности roughnessMap и metalnessMap обычно используются вместе. Это создаёт сложные визуальные эффекты, где материал по-разному взаимодействует с освещением на разных участках.
const roughnessTexture = textureLoader.load('textures/roughness_map.jpg');
const metalnessTexture = textureLoader.load('textures/metalness_map.jpg');
const material = new THREE.MeshStandardMaterial({
color: 0xffffff,
roughnessMap: roughnessTexture,
metalnessMap: metalnessTexture
});
Особенности:
Использование карт roughnessMap и metalnessMap увеличивает количество текстурных обращений в шейдере, но позволяет значительно повысить визуальное качество. Для оптимизации:
Three.js применяет метод физически корректного рендеринга, где значение metalness определяет:
Шероховатость влияет на размытие отражений: чем выше значение, тем мягче отражение света и бликов.
Эти свойства делают карту roughnessMap и metalnessMap обязательными для достижения фотореалистичного PBR в Three.js.