Стандартный материал на основе физики, типа 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), от Брента Берли.
parameters — (опциональный) объект с одним или несколькими свойствами, определяющими внешний вид материала.
Сюда можно передать любое свойство материала (включая любое свойство, унаследованное от Material).
Исключением является свойство color, которое может быть передано в виде шестнадцатеричной строки и по умолчанию имеет значение 0xffffff (белый). Color.set(color) вызывается внутренне.
Общие свойства см. в базовом классе Material.
Альфа-карта - это черно-белая текстура, которая управляет непрозрачностью поверхности (черный: полностью прозрачный; белый: полностью непрозрачный). По умолчанию - null.
Используется только цвет текстуры, игнорируя альфа-канал, если он существует. Для текстур RGB и RGBA рендерер WebGL будет использовать зеленый канал при выборке этой текстуры из-за дополнительного бита точности, предоставляемого для зеленого цвета в DXT-сжатом и несжатом форматах RGB 565. Текстуры только с яркостью и яркость/альфа также будут работать, как и положено.
Красный канал этой текстуры используется в качестве карты окклюзии окружающего пространства. По умолчанию - null. Для карты окклюзии требуется второй набор UVs.
Интенсивность эффекта окклюзии окружающей среды. По умолчанию - 1. Ноль - эффект окклюзии отсутствует.
Текстура для создания карты неровностей. Черные и белые значения отображают воспринимаемую глубину относительно освещения. Фактически не влияет на геометрию объекта, только на освещение. Если определена карта нормалей, то она будет проигнорирована.
Насколько сильно карта неровностей влияет на материал. Типичные диапазоны 0-1. По умолчанию - 1.
Color материала, по умолчанию установлен на белый (0xffffffff).
Объект формы:
{ 'STANDARD': '' };
Это используется WebGLRenderer для выбора шейдеров.
Карта смещения влияет на положение вершин меша. В отличие от других карт, которые влияют только на свет и тень материала, смещенные вершины могут отбрасывать тени, блокировать другие объекты и действовать как настоящая геометрия. Текстура смещения - это изображение, в котором значение каждого пикселя (белый - самый высокий) сопоставляется с вершинами сетки и изменяет их положение.
Насколько сильно карта смещения влияет на меш (где черный цвет - нет смещения, а белый - максимальное смещение). Без установленной карты смещения это значение не применяется. По умолчанию - 1.
Смещение значений карты смещения на вершинах меша. Без установленной карты смещения это значение не применяется. По умолчанию равно 0.
Излучающий (световой) цвет материала, по сути, сплошной цвет, на который не влияет другое освещение. По умолчанию - черный.
Устанавливает карту излучения (свечения). По умолчанию - null. Цвет эмиссионной карты модулируется цветом эмиссии и интенсивностью эмиссии. Если у вас есть эмиссионная карта, обязательно установите цвет излучения на какой-либо другой, но не черный.
Интенсивность излучаемого света. Модулирует цвет излучения. По умолчанию - 1.
Карта окружения. Для обеспечения физически корректного рендеринга следует добавлять только те карты окружения, которые были предварительно обработаны PMREMGenerator. Назначается автоматически из соответствующего объекта CubeReflectionProbe, если Material.envMapAutoAssign имеет значение true. По умолчанию - null.
Масштабирует эффект карты окружения путем умножения ее цвета. По умолчанию 1.
Matrix4 используется для применения эффекта параллакса к .envMap материала. Эта матрица переносит преобразование из мирового пространства в пространство конкретного reflection probe, карту окружения которого этот материал использует для рендеринга. Вычисляется автоматически, если Material.envMapAutoAssign - true. По умолчанию это матрица тождества.
Matrix4, обратная к .envMapParallaxMatrix. Используется для применения эффекта параллакса к .envMap материала. Вычисляется автоматически, если Material.envMapAutoAssign - true. По умолчанию это матрица тождества.
Определяет тип объема параллакса. Такое же, как CubeReflectionProbe.parallaxType. Назначается автоматически из соответствующего CubeReflectionProbe, если Material.envMapAutoAssign - true. По умолчанию ReflectionProbeTypeInfinite.
Карта освещения. По умолчанию равно null. Для карты освещения требуется второй набор UVs.
Интенсивность запеченного света. По умолчанию - 1.
Карта цвета. По умолчанию равно null. Цвет карты текстуры модулируется диффузным .color.
Насколько материал похож на металл. Неметаллические материалы, такие как дерево или камень, используют 0.0, металлические - 1.0, и ничего (обычно) между ними нет. По умолчанию - 0,0. Значение между 0.0 и 1.0 может быть использовано для получения ржавого металлического вида. Если также указана карта metalnessMap, оба значения перемножаются.
Синий канал этой текстуры используется для изменения "металличности" материала.
Определяет, использует ли материал morphNormals. Установите значение true, чтобы передавать атрибуты morphNormals из BufferGeometry в шейдер. По умолчанию false.
Определяет, использует ли материал morphTargets. По умолчанию - false.
Текстура для создания карты нормалей. Значения RGB влияют на нормаль поверхности для каждого фрагмента пикселя и изменяют способ освещения. Карты нормалей не изменяют фактическую форму поверхности, только освещение. В случае, если материал имеет карту нормалей, созданную с использованием левосторонней конвенции, компонент y normalScale должен быть отрицательным, чтобы компенсировать разную ориентацию.
Тип карты нормалей.
Варианты: v3d.TangentSpaceNormalMap (по умолчанию) и v3d.ObjectSpaceNormalMap.
Насколько сильно карта нормалей влияет на материал. Типичные диапазоны - 0-1. По умолчанию это Vector2, установленный на (1,1).
Показатель преломления (IOR) воздуха (приблизительно 1), деленный на показатель преломления материала. Используется с режимами отображения окружения v3d.CubeRefractionMapping и v3d.EquirectangularRefractionMapping. Коэффициент преломления не должен превышать 1. По умолчанию 0,98.
Насколько шероховатым кажется материал. 0.0 означает гладкое зеркальное отражение, 1.0 - полностью рассеянное. По умолчанию 1.0. Если также указан параметр roughnessMap, оба значения умножаются.
Зеленый канал этой текстуры используется для изменения шероховатости материала.
Определяет, использует ли материал скиннинг. По умолчанию - false.
Определяет, используются ли предварительно вычисленные касательные к вертексам, которые должны быть указаны в атрибуте vec4 "tangent". Если этот параметр отключен, касательные выводятся автоматически. Использование предварительно вычисленных касательных дает более точную детализацию карты нормалей в некоторых случаях, например, при зеркальном отображении UV. По умолчанию - false.
Рендерит геометрию в виде вайрфрейма. По умолчанию false (т.е. рендеринг в виде плоских полигонов).
Определяет внешний вид концов линии. Возможные значения "butt", "round" и "square". По умолчанию 'round'.
Это соответствует свойству 2D Canvas lineCap и игнорируется рендерером WebGL.
Определяет внешний вид стыков линий. Возможные значения "round", "bevel" и "miter". По умолчанию 'round'.
Это соответствует свойству 2D Canvas lineJoin
и игнорируется рендерером WebGL.
Контроль толщины вайрфрейма. По умолчанию 1.
В связи с ограничениями OpenGL Core Profile
с WebGL рендерером на большинстве платформ ширина линии будет
всегда будет равна 1, независимо от установленного значения.
Общие методы см. в базовом классе Material.
О том как получить исходный код этого модуля читайте тут.