MeshNodeMaterial - Руководство по Вердж3Д - Софт Эйт Софт
Description: Узнайте как использовать MeshNodeMaterial в интерактивных 3Д-веб-приложениях сделанных на Вердж3Д

Material →

# MeshNodeMaterial

Нодовый материал, на котором основан пайплайн рендеринга «Вердж3Д».

Этот материал используется для описания пользовательских настроек материалов, экспортируемых из «Блендера», «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)

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

## Пазлы

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

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

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