Material

MeshNodeMaterial

Пользовательский материал на основе нод.

Этот материал используется для описания пользовательских настроек материалов, экспортируемых из «Блендера», «3дс Макса» или «Майи». Может быть физически основанным или нефизическими в зависимости от используемых нод.

Примеры

Изменение цвета материала, указанного в ноде "RGB":

const obj = app.scene.getObjectByName('MyObj'); const mat = obj.material; const index = mat.nodeRGBMap['RGB']; // 'RGB' — имя ноды RGB mat.nodeRGB[index] = new v3d.Vector4(1, 0, 0, 1); // новый цвет в формате RGBA (красный)

Изменение значения, указанного в ноде "Value":

const obj = app.scene.getObjectByName('MyObj'); const mat = obj.material; const index = mat.nodeValueMap['Value']; mat.nodeValue[index] = 0.5; // новое значение

Конструктор

MeshNodeMaterial(parameters : Object)

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

Исключением является свойство color (по умолчанию 0xffffff, белый цвет). В случае, если параметр nodeGraph не подан на вход конструктора, свойство цвета используется для генерации альтернативного нодового графа, который будет рендерить данный цвет.

// nodeGraph не подан, материал отображает красный цвет const mat = new MeshNodeMaterial({color: 'red'});

Разработка нодовых материалов с помощью «Ява Скрипта» может стать нетривиальной задачей. Намного эффективнее использовать пакет моделирования, в котором данные материалы отображаются прямо во вьюпорте.

Свойства

Смотрите свойства базового класса Material.

.additionalNodeGraphs : Object

Дополнительные графы, представляющие нодовые группы в составе главного графа нодового материала.

.envMap : Texture

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

.envMapIntensity : Float

Устанавливает интенсивность карты окружения путем умножения ее цвета. По умолчанию 1.

.envMapParallaxMatrix : Matrix4

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

.envMapParallaxMatrixInv : Matrix4

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

.envMapParallaxType : Constant

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

.flatShading : Boolean

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

.fog : Boolean

Определяет, будет ли туман влиять на данный материал. По умолчанию true.

.isMeshNodeMaterial : Boolean

Используется для проверки того, представляет ли данный экземпляр класса нодовый материал. Вы не должны изменять этот параметр, так как он используется для оптимизации внутри движка.

.materialIndex : Integer

Индекс материала. Используется для определения соответствующего выхода блендеровской ноды object info.

.nodeGraph : DiGraph

Граф, содержащий ноды материала.

.nodeRGB : Array

Массив значений Vector4, который содержит значения цветов "RGB"-нод материала. Обратите внимание, что эти цвета представлены 4-мерным вектором, а не классом Color.

.nodeRGBMap : Array

Сопоставляет имя "RGB"-ноды с индексом в массиве .nodeRGB. Используется для определения того, какое значение цвета должно быть обновлено, см. пример выше.

.nodeTextures : Object

Объект с текстурами материалов. Он сопоставляет имена текстур с textures. Вы можете использовать его для динамического назначения новых текстур материалу.

.nodeValue : Array

Массив числовых значений, которые содержат значения "Value"-нод материала.

.nodeValueMap : Array

Сопоставляет имя "Value"-ноды с индексом в массиве .nodeValue. Используется для определения значения, которое должно быть обновлено, см. пример выше.

.profile : String

Профиль материала ноды, может быть "blender", "max" или "maya".

Методы

Смотрите методы базового класса Material.

.canUseGTAO() → Boolean

Проверяет, содержит ли материал ноды, использующие эффект GTAO.

.connectTexture(tex : Texture, nodeName : String, inputName : String)

Подключает текстуру ко входу указанной ноды. И нода и её вход определяются по имени.

.isUnlit() → Boolean

Проверяет, является ли данный материал неосвещаемым (основан на эмиссивных нодах).

.findNodeByName(name : String) → Node

Ищет и возвращает ноду по заданному имени.

.getInputColor(node : Node, index : Integer) → Color

Определяет цвет, подданный на вход указанной ноды.

.getInputTexture(node : Node, index : Integer) → Texture

Определяет текстуру, подданную на вход указанной ноды.

.getInputValue(node : Node, index : Integer) → Float

Определяет числовое значение, поданное на вход указанной ноды.

.getMainShaderNode() → Node

Анализирует материал и возвращает главную шейдерную ноду.

.getStandardProp(prop : String) → Node

Анализирует материал и возвращает значение «стандартного» параметра. Если данный параметр не может быть установлен, возвращает значение по умолчанию.

Поддерживаемые параметры:

color
Базовый цвет материала. По умолчанию 0xffffff (белый).
map
Базовая текстура материала. По умолчанию null (текстура отсутствует).
opacity
Значение непрозрачности. По умолчанию 1.0 (непрозрачный).
metalness
Значение металличности. По умолчанию 0.5 (полуметалличный).
metalnessMap
Текстура металличности. По умолчанию null (текстура отсутствует)
roughness
Значение шероховатости. По умолчанию 0.5.
roughnessMap
Текстура шероховатости. По умолчанию null (текстура отсутствует)
aoMap
Текстура эмбиент окклюжн. По умолчанию null (текстура отсутствует)
aoMapIntensity
Влияние текстуры эмбиент окклюжн. По умолчанию 1.0.
normalMap
Карта нормалей. По умолчанию null (текстура отсутствует)
normalScale
Влияние карты нормалей вдоль координат U и V. По умолчанию (1.0, 1.0).
emissive
Цвет эмиссии. По умолчанию 0x000000 (чёрный).
emissiveMap
Текстура эмиссии. По умолчанию null (текстура отсутствует)
emissiveIntensity
Интенсивность эмиссии. По умолчанию 0.0.

.hasNode(nodeType : String) → Boolean

Проверяет, содержит ли нодовый материал ноду указанного типа (nodeType).

.needsLightPathDir() → Boolean

Проверяет, содержит ли материал ноды Light Path, Ray Switch, либо ноды OSL.

.traverseNodes(cb : Function)

Пробегает все ноды материала и вызывает указанную функцию для каждой.

.updateNodeGraph()

Генерирует шейдеры и обновляет другие параметры материала на основе указанного .nodeGraph.

.useAddTransparency() → Boolean

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

.worldMaterialColor() → Color

Проверят, может ли мировой материал быть упрощён до одного цвета и возвращает этот цвет. Метод используется внутри движка для оптимизации.

Статические методы

.nodeTexUniName(type : String, texIndex : Integer) → String

Генерирует имя текстурного юниформа на основе типа и произвольного индекса (например текстурного индекса внутри ресурса glTF).

.nodeGraphFromExtGraph(gltfExtNodeGraph : Object) → DiGraph

Осуществляет преобразование нодового графа GLTF в формат, используемый свойством .nodeGraph материала.

.nodeGraphTraverse(nodeGraph : DiGraph, cb : Function)

Пробегает все ноды материала и вызывает указанную функцию для каждой.

Пазлы

Используйте пазлы материалов для управления материалами без программирования.

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

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