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

# Material

Абстрактный класс материалов.

Материалы описывают внешний вид объектов. В большинстве случаев они определяются независимым от рендерера способом, поэтому вам не придется переписывать материалы, если вы решите использовать другой рендерер.

Следующие свойства и методы наследуются всеми другими типами материалов (хотя они могут иметь другие значения по умолчанию).

## Конструктор

### Material()

Создает абстрактный материал (вызывать не имеет смысла).

## Свойства

### # .alphaTest : Float

Устанавливает значение альфы, которая будет использоваться при выполнении альфа-теста. Материал не будет отрисован, если непрозрачность меньше этого значения. По умолчанию `0`.

### # .alphaToCoverage : Boolean

Включает функцию alpha to coverage. Может использоваться только в том случае, когда MSAA включён для текущего контекста рендеринга (рендерер должен быть создан с параметром `antialias` равным `true`). По умолчанию `false`.

### # .blendDst : Constant

Назначение смешивания. По умолчанию OneMinusSrcAlphaFactor. Все возможные значения данного свойства смотрите здесь.

Чтобы этот параметр имел эффект, свойство .blending должно быть установлено в CustomBlending.

### # .blendDstAlpha : Constant

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

### # .blendEquation : Constant

Уравнивание используемое для смешивания. По умолчанию используется AddEquation. Все возможные значения этого свойства смотрите здесь.

Чтобы этот параметр имел эффект, свойство .blending должно быть установлено в CustomBlending.

### # .blendEquationAlpha : Constant

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

### # .blending : Blending

Какое смешивание использовать при отображении объектов с данным материалом.

Это значение должно быть установлено в CustomBlending для использования пользовательских .blendSrc, .blendDst или .blendEquation.

Все возможные значения см. в разделе режимы смешивания. По умолчанию используется NormalBlending.

### # .blendSrc : Constant

Источник смешивания. По умолчанию SrcAlphaFactor. Все возможные значения данного свойства смотрите здесь

Чтобы этот параметр имел эффект, свойство .blending должно быть установлено в CustomBlending.

### # .blendSrcAlpha : Constant

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

### # .clipIntersection : Boolean

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

### # .clippingPlanes : Array

Определяемые пользователем секущие плоскости, заданные как объекты Plane в мировом пространстве. Эти плоскости применяются к объектам, к которым прикреплен данный материал. Точки в пространстве, чье расстояние до плоскости отрицательно, обрезаются (не отображаются). Для работы этой функции свойство WebGLRenderer.localClippingEnabled должно быть установлено в `true`. По умолчанию `null`.

### # .clipShadows : Boolean

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

### # .colorWrite : Boolean

Нужно ли отображать цвет материала. Это свойство можно использовать вместе со свойством renderOrder меша для создания невидимых объектов, которые закрывают другие объекты. По умолчанию `true`.

### # .defines : Object

Пользовательские определения для вставки в шейдер. Они передаются в виде объекта с парами ключ/значение. `{ MY_CUSTOM_DEFINE: '' , PI2: Math.PI * 2 }`. Эти пары определяются как в вершинных, так и во фрагментных шейдерах. По умолчанию — `undefined`.

### # .depthFunc : Constant

Какую функцию глубины использовать. По умолчанию LessEqualDepth. Все возможные значения см. здесь.

### # .depthPrepass : Boolean

Если `true`, использовать специальный режим прозрачности "Depth Prepass", который рендерит только один (ближайший к наблюдателю) слой прозрачности.

### # .depthTest : Boolean

Включать ли проверку глубины при рендеринге этого материала. По умолчанию `true`.

### # .depthWrite : Boolean

Влияет ли рендеринг этого материала на буфер глубины. По умолчанию `true`.

При отрисовке 2Д-наложений может быть полезно отключить запись глубины, чтобы сложить несколько объектов вместе, не создавая артефактов Z-буфера.

### # .dithering : Boolean

Применять ли к цвету дизеринг для устранения полос. По умолчанию `false`.

### # .envMapAutoAssign : Boolean

Если `true`, то `envMap` и связанные с ним свойства параллакса таких материалов, как MeshStandardMaterial и MeshNodeMaterial автоматически назначаются/вычисляются в соответствии с тем, какой CubeReflectionProbe влияет на объект, на котором используется этот материал. По умолчанию Material.DefaultEnvMapAutoAssign (`true`).

### # .id : Integer

Уникальный номер для данного экземпляра материала.

### # .isMaterial : Boolean

Является ли объект экземпляром класса Material. Только для чтения.

### # .name : String

Необязательное имя объекта (не обязательно уникальное). По умолчанию используется пустая строка.

### # .needsUpdate : Boolean

Указывает, что материал должен быть перекомпилирован.

### # .opacity : Float

Величина в диапазоне `0.0` - `1.0`, указывающая, насколько прозрачен материал. Значение `0.0` означает полностью прозрачный, `1.0` - полностью непрозрачный.

Если свойство transparent материала не установлено в `true`, материал будет оставаться полностью непрозрачным, и это значение будет влиять только на его цвет. По умолчанию `1.0`.

### # .polygonOffset : Boolean

Использовать ли смещение полигонов. По умолчанию `false`. Это соответствует функции `GL_POLYGON_OFFSET_FILL` WebGL.

### # .polygonOffsetFactor : Integer

Устанавливает коэффициент смещения полигонов. По умолчанию `0`.

### # .polygonOffsetUnits : Integer

Устанавливает единицы измерения смещения полигонов. По умолчанию `0`.

### # .precision : String

Переопределяет точность рендеринга по умолчанию для этого материала. Может быть `"highp"`, `"mediump"` или `"lowp"`. По умолчанию `null`.

### # .premultipliedAlpha : Boolean

Нужно ли предварительно умножать значение альфа-канала (прозрачности). По умолчанию `false`.

### # .shadowSide : Constant

Определяет, с какой стороны грани отбрасывают тени. Может быть v3d.FrontSide, v3d.BackSide, v3d.DoubleSide или `null`. По умолчанию используется v3d.FrontSide.

Если `null`, то сторона, отбрасывающая тени, определяется следующим образом:

Material.side | Сторона, отбрасывающая тень
--- | ---
v3d.FrontSide | задняя сторона
v3d.BackSide | передняя сторона
v3d.DoubleSide | обе стороны

### # .side : Constant

Определяет, какая сторона граней будет отрисовываться: передняя, задняя или обе. По умолчанию v3d.FrontSide. Другие варианты: v3d.BackSide, v3d.DoubleSide и v3d.TwoPassDoubleSide.

### # .stencilWrite : Boolean

Выполняются ли операции с буфером шаблона. Для выполнения записи или сравнения с буфером шаблона это значение должно быть `true`. По умолчанию `false`.

### # .stencilWriteMask : Integer

Битовая маска, используемая при записи в буфер шаблона. По умолчанию `0xFF`.

### # .stencilFunc : Integer

Используемая функция сравнения шаблонов. По умолчанию AlwaysStencilFunc. Все возможные значения свойства смотрите здесь.

### # .stencilRef : Integer

Значение, используемое при выполнении сравнений шаблонов или операций с шаблонами. По умолчанию `0`.

### # .stencilFuncMask : Integer

Битовая маска, используемая при сравнении с буфером шаблона. По умолчанию `0xFF`.

### # .stencilFail : Integer

Какую операцию выполнять с шаблоном, если функция сравнения возвращает false. По умолчанию - KeepStencilOp. Все возможные значения см. в разделе операции с шаблонами.

### # .stencilZFail : Integer

Какую операцию выполнять с шаблоном, если функция сравнения возвращает true, но тест глубины не прошел. По умолчанию KeepStencilOp. Все возможные значения см. в разделе операции с шаблонами.

### # .stencilZPass : Integer

Какую операцию выполнять с шаблоном, если функция сравнения возвращает true и тест глубины пройден. По умолчанию KeepStencilOp. Все возможные значения см. в разделе операции с шаблонами.

### # .toneMapped : Boolean

Определяет, накладывается ли на этот материал тоновое отображение в соответствии с настройкой toneMapping рендерера. По умолчанию `true`.

### # .transparent : Boolean

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

Если установлено значение `true`, то степень прозрачности материала контролируется установкой его свойства opacity. По умолчанию `false`.

### # .type : String

Значение — строка `"Material"`. Это значение не должно быть изменено и может быть использовано для того, чтобы найти все объекты данного типа в сцене.

### # .uuid : String

UUID данного экземпляра материала. Он присваивается автоматически, поэтому его не нужно редактировать.

### # .version : Integer

Он начинается с `0` и считает, сколько раз # .needsUpdate : Booleanустановлено в `true`.

### # .vertexColors : Boolean

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

Это свойство не оказывает влияния на нодовые материалы.

### # .visible : Boolean

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

### # .userData : Object

Объект, который можно использовать для хранения пользовательских данных о материале. Он не должен содержать ссылки на функции, так как они не будут клонироваться.

## Статические свойства

### # .DefaultEnvMapAutoAssign : Boolean

Настройка по умолчанию для .envMapAutoAssign для вновь созданных материалов. Значение по умолчанию — `true`.

## Методы

EventDispatcher методы доступны для этого класса.

### # .clone() → Material

Возвращает новый материал с теми же параметрами, что и данный материал.

### # .copy(material : Material) → Material

Копирует параметры из указанного материала в текущий.

### # .customProgramCacheKey() → String

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

Например, если onBeforeCompile содержит условное утверждение типа:

`if (black) { shader.fragmentShader = shader.fragmentShader.replace('gl_FragColor = vec4(1)', 'gl_FragColor = vec4(0)') }`

то customProgramCacheKey должен быть установлен следующим образом:

`material.customProgramCacheKey = function() { return black ? '1' : '0'; }`

В отличие от свойств, коллбэк не поддерживается в методах .clone() и .copy().

### # .dispose()

Освобождает связанные с GPU ресурсы данного материала. Текстуры материала не утилизируются. Их необходимо утилизировать с помощью метода Texture.dispose().

### # .onBeforeCompile(shader : Shader, renderer : WebGLRenderer)

Необязательный коллбэк, который выполняется непосредственно перед компиляцией программы шейдера. Эта функция вызывается с исходным кодом шейдера в качестве параметра. Полезно для модификации встроенных материалов.

В отличие от свойств, коллбэк не поддерживается в методах .clone() и .copy().

### # .setValues(values : Object)

values — контейнер с параметрами.

Устанавливает свойства на основе `values`.

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

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