Material

MeshStandardMaterial

Стандартный материал на основе физики, типа Metallic-Roughness.

Рендеринг на основе физики (PBR) недавно стал стандартом во многих 3D-приложениях, таких как Unity, Unreal и 3D Studio Max.

Этот подход отличается от старых тем, что вместо использования приближенных данных о том, как свет взаимодействует с поверхностью, используется физически корректная модель. Идея заключается в том, что вместо того, чтобы настраивать материалы так, чтобы они хорошо выглядели при определенном освещении, можно создать материал, который будет "правильно" реагировать на все сценарии освещения.

На практике это дает более точный и реалистичный результат, чем MeshLambertMaterial или MeshPhongMaterial, за счет более высокой вычислительной сложности.

Шейдинг рассчитывается так же, как и для MeshPhongMaterial, с использованием модели шейдинга Phong. Это позволяет рассчитать затенение на пиксель (т.е. в fragment shader, он же пиксельный шейдер) которое дает более точные результаты чем модель Gouraud, используемая MeshLambertMaterial, за счет снижения производительности.

Обратите внимание, что для достижения наилучших результатов при использовании этого материала всегда следует указывать environment map.

Для нетехнического введения в концепцию PBR и как создать материал PBR, ознакомьтесь с этими статьями, написанными командой marmoset:

Технические подробности подхода, используемого в Verge3D (и большинстве других систем PBR), можно найти здесь paper from Disney (pdf), от Брента Берли.

Конструктор

MeshStandardMaterial(parameters : Object)

parameters — (опциональный) объект с одним или несколькими свойствами, определяющими внешний вид материала. Сюда можно передать любое свойство материала (включая любое свойство, унаследованное от Material).

Исключением является свойство color, которое может быть передано в виде шестнадцатеричной строки и по умолчанию имеет значение 0xffffff (белый). Color.set(color) вызывается внутренне.

Свойства

Общие свойства см. в базовом классе Material.

.alphaMap : Texture

Альфа-карта - это черно-белая текстура, которая управляет непрозрачностью поверхности (черный: полностью прозрачный; белый: полностью непрозрачный). По умолчанию - null.

Используется только цвет текстуры, игнорируя альфа-канал, если он существует. Для текстур RGB и RGBA рендерер WebGL будет использовать зеленый канал при выборке этой текстуры из-за дополнительного бита точности, предоставляемого для зеленого цвета в DXT-сжатом и несжатом форматах RGB 565. Текстуры только с яркостью и яркость/альфа также будут работать, как и положено.

.aoMap : Texture

Красный канал этой текстуры используется в качестве карты окклюзии окружающего пространства. По умолчанию - null. Для карты окклюзии требуется второй набор UVs.

.aoMapIntensity : Float

Интенсивность эффекта окклюзии окружающей среды. По умолчанию - 1. Ноль - эффект окклюзии отсутствует.

.bumpMap : Texture

Текстура для создания карты неровностей. Черные и белые значения отображают воспринимаемую глубину относительно освещения. Фактически не влияет на геометрию объекта, только на освещение. Если определена карта нормалей, то она будет проигнорирована.

.bumpScale : Float

Насколько сильно карта неровностей влияет на материал. Типичные диапазоны 0-1. По умолчанию - 1.

.color : Color

Color материала, по умолчанию установлен на белый (0xffffffff).

.defines : Object

Объект формы: { 'STANDARD': '' }; Это используется WebGLRenderer для выбора шейдеров.

.displacementMap : Texture

Карта смещения влияет на положение вершин меша. В отличие от других карт, которые влияют только на свет и тень материала, смещенные вершины могут отбрасывать тени, блокировать другие объекты и действовать как настоящая геометрия. Текстура смещения - это изображение, в котором значение каждого пикселя (белый - самый высокий) сопоставляется с вершинами сетки и изменяет их положение.

.displacementScale : Float

Насколько сильно карта смещения влияет на меш (где черный цвет - нет смещения, а белый - максимальное смещение). Без установленной карты смещения это значение не применяется. По умолчанию - 1.

.displacementBias : Float

Смещение значений карты смещения на вершинах меша. Без установленной карты смещения это значение не применяется. По умолчанию равно 0.

.emissive : Color

Излучающий (световой) цвет материала, по сути, сплошной цвет, на который не влияет другое освещение. По умолчанию - черный.

.emissiveMap : Texture

Устанавливает карту излучения (свечения). По умолчанию - null. Цвет эмиссионной карты модулируется цветом эмиссии и интенсивностью эмиссии. Если у вас есть эмиссионная карта, обязательно установите цвет излучения на какой-либо другой, но не черный.

.emissiveIntensity : Float

Интенсивность излучаемого света. Модулирует цвет излучения. По умолчанию - 1.

.envMap : Texture

Карта окружения. Для обеспечения физически корректного рендеринга следует добавлять только те карты окружения, которые были предварительно обработаны PMREMGenerator. Назначается автоматически из соответствующего объекта CubeReflectionProbe, если Material.envMapAutoAssign имеет значение true. По умолчанию - null.

.envMapIntensity : Float

Масштабирует эффект карты окружения путем умножения ее цвета. По умолчанию 1.

.envMapParallaxMatrix : Matrix4

Matrix4 используется для применения эффекта параллакса к .envMap материала. Эта матрица переносит преобразование из мирового пространства в пространство конкретного reflection probe, карту окружения которого этот материал использует для рендеринга. Вычисляется автоматически, если Material.envMapAutoAssign - true. По умолчанию это матрица тождества.

.envMapParallaxMatrixInv : Matrix4

Matrix4, обратная к .envMapParallaxMatrix. Используется для применения эффекта параллакса к .envMap материала. Вычисляется автоматически, если Material.envMapAutoAssign - true. По умолчанию это матрица тождества.

.envMapParallaxType : Constant

Определяет тип объема параллакса. Такое же, как CubeReflectionProbe.parallaxType. Назначается автоматически из соответствующего CubeReflectionProbe, если Material.envMapAutoAssign - true. По умолчанию ReflectionProbeTypeInfinite.

.lightMap : Texture

Карта освещения. По умолчанию равно null. Для карты освещения требуется второй набор UVs.

.lightMapIntensity : Float

Интенсивность запеченного света. По умолчанию - 1.

.map : Texture

Карта цвета. По умолчанию равно null. Цвет карты текстуры модулируется диффузным .color.

.metalness : Float

Насколько материал похож на металл. Неметаллические материалы, такие как дерево или камень, используют 0.0, металлические - 1.0, и ничего (обычно) между ними нет. По умолчанию - 0,0. Значение между 0.0 и 1.0 может быть использовано для получения ржавого металлического вида. Если также указана карта metalnessMap, оба значения перемножаются.

.metalnessMap : Texture

Синий канал этой текстуры используется для изменения "металличности" материала.

.morphNormals : Boolean

Определяет, использует ли материал morphNormals. Установите значение true, чтобы передавать атрибуты morphNormals из BufferGeometry в шейдер. По умолчанию false.

.morphTargets : Boolean

Определяет, использует ли материал morphTargets. По умолчанию - false.

.normalMap : Texture

Текстура для создания карты нормалей. Значения RGB влияют на нормаль поверхности для каждого фрагмента пикселя и изменяют способ освещения. Карты нормалей не изменяют фактическую форму поверхности, только освещение. В случае, если материал имеет карту нормалей, созданную с использованием левосторонней конвенции, компонент y normalScale должен быть отрицательным, чтобы компенсировать разную ориентацию.

.normalMapType : Integer

Тип карты нормалей.

Варианты: v3d.TangentSpaceNormalMap (по умолчанию) и v3d.ObjectSpaceNormalMap.

.normalScale : Vector2

Насколько сильно карта нормалей влияет на материал. Типичные диапазоны - 0-1. По умолчанию это Vector2, установленный на (1,1).

.refractionRatio : Float

Показатель преломления (IOR) воздуха (приблизительно 1), деленный на показатель преломления материала. Используется с режимами отображения окружения v3d.CubeRefractionMapping и v3d.EquirectangularRefractionMapping. Коэффициент преломления не должен превышать 1. По умолчанию 0,98.

.roughness : Float

Насколько шероховатым кажется материал. 0.0 означает гладкое зеркальное отражение, 1.0 - полностью рассеянное. По умолчанию 1.0. Если также указан параметр roughnessMap, оба значения умножаются.

.roughnessMap : Texture

Зеленый канал этой текстуры используется для изменения шероховатости материала.

.skinning : Boolean

Определяет, использует ли материал скиннинг. По умолчанию - false.

.vertexTangents : Boolean

Определяет, используются ли предварительно вычисленные касательные к вертексам, которые должны быть указаны в атрибуте vec4 "tangent". Если этот параметр отключен, касательные выводятся автоматически. Использование предварительно вычисленных касательных дает более точную детализацию карты нормалей в некоторых случаях, например, при зеркальном отображении UV. По умолчанию - false.

.wireframe : Boolean

Рендерит геометрию в виде вайрфрейма. По умолчанию false (т.е. рендеринг в виде плоских полигонов).

.wireframeLinecap : String

Определяет внешний вид концов линии. Возможные значения "butt", "round" и "square". По умолчанию 'round'.

Это соответствует свойству 2D Canvas lineCap и игнорируется рендерером WebGL.

.wireframeLinejoin : String

Определяет внешний вид стыков линий. Возможные значения "round", "bevel" и "miter". По умолчанию 'round'.

Это соответствует свойству 2D Canvas lineJoin и игнорируется рендерером WebGL.

.wireframeLinewidth : Float

Контроль толщины вайрфрейма. По умолчанию 1.

В связи с ограничениями OpenGL Core Profile с WebGL рендерером на большинстве платформ ширина линии будет всегда будет равна 1, независимо от установленного значения.

Методы

Общие методы см. в базовом классе Material.

Исходный файл

О том как получить исходный код этого модуля читайте тут.