Spatial Material

Введение

SpatialMaterial это 3D материал по умолчанию, который дает большинство возможностей необходимых художникам в материале, без необходимости писать шейдерный код. Тем не менее, он может быть сконвертирован в шейдерный код если возникнет необходимость в дополнительной функциональности.

Этот урок объясняет большинство параметров представленных в SpatialMaterial.

Существует 4 способа добавить SpatialMaterial к объекту. Его можно добавить в свойстве Material сетки. Его можно добавить в свойстве Material узла, использующего сетку (например, узла MeshInstance), в свойстве Material Override узла, использующего сетку, и в свойстве Material Overlay.

../../_images/add_material.png

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

Свойство Material Overlay (Наложение материала) будет отображать материал поверх текущего материала, используемого сеткой. Например, это можно использовать для наложения эффекта прозрачного щита на сетку.

Флаги

Пространственные(spatial) материалы имеют много флажков для управлением их поведением.

../../_images/spatial_material1.png

Прозрачный

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

Этот метод менее производительный (проходит много изменений состояний) и делает такие материалы не доступными для многих эффектов средне- и пост-обработки (таких как SSAO, SSR, итд.) которые требуют идеально непрозрачной геометрии.

По этой причине, материалы в Godot по умолчанию непрозрачны если не настроено обратное. Главные настройки включающие прозрачность это:

  • Флаг Transparent (этот самый)

  • Режим смешивания(blend mode) иной чем "Mix"

  • Включение резкости или размытия дистанции

Используйте тень для непрозрачности

Освещение изменяет альфа-канал так, что затененные области становятся непрозрачными, а незатененные - прозрачными. Полезно для наложения теней на камеру в AR.

Незатененный

В большинстве случаев он необходим материалам которые не зависят от освещения (shaded).

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

../../_images/spatial_material26.png

Вершинное освещение

Godot более и менее одинаков в отображении каждого пикселя благодаря пре-обработке глубины. Все вычисления света делаются запуском шейдера света на каждом пикселе.

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

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

../../_images/spatial_material2.png

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

Без теста глубины

Для того чтобы показывать близкие объекты над дальними объектами, проводится тест глубины. Его выключение ведёт к тому что объекты будут показывать над (или под) всеми остальными.

Его отключение имеет смысл для отрисовки индикаторов в мировом пространстве, и отлично работает в связке со свойством Render Priority на Материале (смотрите внизу данной страницы).

../../_images/spatial_material3.png

Использовать размер точки

Этот флаг работает только с геометрией представленной через точки (обычно всё сделано из треугольников когда импортируется из редакторов 3D графики). Если же это так, то размер этих точек может быть изменён (смотрите ниже).

Мировая трипланарность

Когда используется трипланарное наложение (смотрите нижу, в настройках UV1 и UV2), триплан вычисляется из локального пространства объекта. Этот флаг заставляет его вычисляться из мирового пространства.

Фиксированный размер

Этот флаг заставляет объект рисоваться в одинаковом размере вне зависимости от расстояния. Это полезно для индикаторов (без теста глубины и высокого приоритета отрисовки) и некоторых типов билбордов.

Не получать тени

Заставляет объект не принимать тени которые иначе были бы отброшены на него.

Отключить окружающие освещение

Заставляет объект не принимать окружающий свет который бы иначе осветил его.

Убедитесь, что нормали верны

Исправляет нормали при использовании неравномерного масштабирования.

Цвет вершин

Этот параметр позволяет выбрать, что будет сделано по-умолчанию с цветами вершин, которые поступают из приложения для 3D-моделирования. По-умолчанию они игнорируются.

../../_images/spatial_material4.png

Использовать как Альбедо

Использование этого параметра заставляет цвет вершин использовать цвет альбедо.

Является SRGB

Большинство 3D DCC, скорее всего, экспортируют цвета вершин в sRGB, поэтому включение этой опции поможет им выглядеть правильно.

Параметры

SpatialMaterial также имеет несколько настраиваемых параметров для настройки многих аспектов рендеринга:

../../_images/spatial_material5.png

Режим смешения

Указывает алгоритм, используемый при диффузном рассеянии света при попадании на объект. По умолчанию используется Burley. Также доступны другие режимы:

  • Burley: Режим по умолчанию, оригинальный алгоритм диффузии Disney Principled PBS.

  • Lambert: Не подвержен влиянию шероховатости.

  • Lambert Wrap: Расширяет Lambert для охвата более 90 градусов при увеличении шероховатости. Отлично подходит для волос и моделирования дешевого подповерхностного рассеяния. Эта реализация экономит энергию.

  • Oren Nayar: Эта реализация направлена на учет микрошлифов (через шероховатость). Хорошо работает для глиноподобных материалов и некоторых типов ткани.

  • Toon: Обеспечивает жесткий срез для освещения, сглаживание зависит от шероховатости. Для достижения лучшего эффекта рекомендуется отключить влияние неба в настройках окружающего освещения в окружении или отключить окружающее освещение в пространственном (spatial) материале.

../../_images/spatial_material6.png

Зеркальный режим

Определяет, как будет отображаться спекулярный шар. Спекулярное пятно представляет собой форму источника света, отраженного от объекта.

  • ShlickGGX: Самый распространенный блоб, используемый PBR 3D движками в настоящее время.

  • Blinn: Распространен в движках предыдущего поколения. Не стоит использовать в настоящее время, но оставлен здесь ради совместимости.

  • Phong: Тоже, что и выше.

  • Toon: Создает toon блоб, размер которого меняется в зависимости от шероховатости.

  • Disabled: Иногда блоб мешает. Прочь!

../../_images/spatial_material7.png

Режим смешивания

Управляет режимом наложения материала. Имейте в виду, что любой режим, кроме Смешивания, заставляет объект проходить через прозрачный конвейер.

  • Mix: Режим наложения по умолчанию, альфа управляет тем, насколько объект виден.

  • Add: Объект смешивается аддитивно, хорошо подходит для бликов или некоторых огненных эффектов.

  • Sub: Объект вычитается.

  • Mul: Объект умножается.

../../_images/spatial_material8.png

Режим отбраковки

Определяет, какая сторона объекта не рисуется при отрисовке задних граней:

  • Back: Задняя часть объекта обрезается, если она не видна (по умолчанию).

  • Front: Передняя часть объекта отсеивается, если она не видна.

  • Disabled: Используется для объектов, которые являются двусторонними (не производится выбраковка).

Примечание

По умолчанию, в Blender отключено отсечение невидимых полигонов у материалов и Blender будет экспортировать материалы так чтобы соответствовать тому как они отрисовываются в Blender. Это значит что у материалов в Godot отсечение материалов установлено на Отключить. Это может уменьшить производительность при отрисовке невидимых граней, даже когда они были отсечены другими гранями. Что бы решить это, включите Отсечение невидимых граней во вкладке "Материалы" в Blender, после этого экспортируйте в 3d-сцену в формате glTF снова.

Режим прорисовки глубины

Указывает, когда должен происходить рендеринг глубины.

  • Opaque Only (default): Глубина рисуется только для непрозрачных объектов.

  • Всегда: Отрисовка глубины рисуется как для непрозрачных, так и для прозрачных объектов.

  • Никогда: Рисование глубины не выполняется (не путайте это с опцией «Без проверки глубины» выше).

  • Предварительный проход глубины: Для прозрачных объектов сначала выполняется непрозрачный проход с непрозрачными частями, затем прозрачность прорисовывается выше. Используйте этот вариант с прозрачной травой или листвой деревьев.

../../_images/material_depth_draw.png

Ширина линии

При рисовании линий укажите ширину рисуемых линий. Эта опция недоступна на большинстве современного оборудования.

Размер точки

При рисовании точек укажите размер точки в пикселях.

Режим рекламного щита

Включает режим рекламного щита для рисования материалов. Это контролирует, как объект смотрит в камеру:

  • Отключено: Режим рекламного щита отключен.

  • Включено: Режим рекламного щита включен, ось -Z объекта всегда будет обращена к камере.

  • Y-Рекламный щит Ось X объекта всегда будет выровнена с камерой.

  • Частицы: Наиболее подходит для систем частиц, так как позволяет указывать параметры анимации.

../../_images/spatial_material9.png

Вышеуказанные параметры доступны только для частиц с режимом рекламного щита.

Сохранять масштаб рекламного щита

Включает масштабирование сетки в режиме билборда.

Расти

Увеличивает вершины объекта в направлении, указанном их нормалями:

../../_images/spatial_material10.png

Это обычно используется для создания дешевых контуров. Добавьте второй проход по материалу, сделайте его черным и незатененным, сделайте обратную обработку (Cull Front) и добавьте растушевку:

../../_images/spatial_material11.png

Используйте Альфа-Ножницы

Когда прозрачность, отличная от 0 или 1, не требуется, можно установить порог, чтобы объект не отображал полупрозрачные пиксели.

../../_images/spatial_material12.png

Это визуализирует объект через непрозрачный конвейер, который работает быстрее и позволяет использовать эффекты промежуточной и постобработки, такие как SSAO, SSR и т.д.

Цвета материалов, карт и каналов

Помимо параметров, определяющими сами материалы являются цвета, текстуры и каналы. Godot поддерживает обширный их список. Они подробно описаны ниже:

Альбедо

Albedo - это базовый цвет материала, на который опираются все остальные настройки. Когда установлено значение Unshaded, это единственный видимый цвет. В предыдущих версиях Godot этот канал назывался Diffuse. Изменение названия произошло в основном потому, что в PBR (Physically Based Rendering) этот цвет влияет на гораздо большее количество вычислений, чем просто диффузный путь освещения.

Альбедо цвета и текстуры можно использовать вместе, так как они умножаются.

Альфа-канал в цвете альбедо и текстуре также используется для прозрачности объекта. Если вы используете цвет или текстуру с альфа-каналом, убедитесь, что вы включили прозрачность или alpha scissoring*, чтобы они работали.

Металлический

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

Параметр Specular - это общая величина для отражения (в отличие от Metallic, этот параметр не экономит энергию, поэтому оставьте его на 0.5 и не трогайте его, если вам это не нужно).

Минимальная внутренняя отражательная способность составляет 0,04, поэтому невозможно сделать материал полностью неотражающим, как и в реальной жизни.

../../_images/spatial_material13.png

Шероховатость

Roughness влияет на то, как происходит отражение. Значение 0 делает его идеальным зеркалом, а значение 1 полностью размывает отражение (имитируя естественную микрошлифовку). Большинство распространенных типов материалов могут быть получены при правильном сочетании Металлик и Шероховатость.

../../_images/spatial_material14.png

Излучение

Emission определяет, сколько света испускается материалом (имейте в виду, что это не включает свет, окружающий геометрию, если не используются Использование GIProbe (карты тайтлов)). Это значение добавляется к конечному изображению и не зависит от другого освещения в сцене.

../../_images/spatial_material15.png

Карта нормалей

Нормальное отображение (Англа: нормал маппинг) позволяет задать текстуру, которая отображает более мелкие детали формы. Это не изменяет геометрию, только угол падения света. В Godot используются только красный и зеленый каналы карт нормалей для лучшего сжатия и более широкой совместимости.

../../_images/spatial_material16.png

Примечание

Godot требует, чтобы карта нормалей использовала координаты X+, Y+ и Z+, это известно как стиль OpenGL. Если вы импортировали материал, созданный для использования в другом движке, он может быть в стиле DirectX, в этом случае карту нормалей нужно преобразовать так, чтобы ось Y была перевернута.

Более подробную информацию о картах нормалей (включая таблицу порядка координат для популярных движков) можно найти здесь.

Обод

Некоторые ткани имеют небольшой микромех, который заставляет свет рассеиваться вокруг него. Godot эмулирует это с помощью параметра Rim. В отличие от других реализаций освещения обода, которые просто используют канал излучения, этот параметр действительно учитывает свет (нет света - нет обода). Это делает эффект значительно более правдоподобным.

../../_images/spatial_material17.png

Размер обода зависит от шероховатости, и есть специальный параметр, указывающий, как он должен быть окрашен. Если Tint равен 0, то для обода используется цвет света. Если Tint равен 1, то используется альбедо материала. Обычно лучше всего использовать промежуточные значения.

Прозрачное покрытие

Эта функция доступна только при использовании бэкенда GLES3

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

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

../../_images/clearcoat_comparison.png

Примечание

Изменения будут более заметны в Godot 4.

Анизотропия

Эта функция доступна только при использовании бэкенда GLES3

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

../../_images/spatial_material18.png

Внешнее перекрытие

Можно указать запеченную карту окклюзии окружающего света. Эта карта влияет на то, сколько окружающего света достигает каждой поверхности объекта (по умолчанию она не влияет на прямой свет). Хотя для создания окклюзии можно использовать Screen-Space Ambient Occlusion (SSAO), ничто не сравнится с качеством хорошо пропеченной карты AO. Рекомендуется запекать окружающее затенение всегда, когда это возможно.

../../_images/spatial_material19.png

Глубина

Эта функция доступна только при использовании бэкенда GLES3

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

../../_images/spatial_material20.png

Подповерхностное рассеяние

Эта функция доступна только при использовании бэкенда GLES3

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

../../_images/spatial_material21.png

Пропускание света

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

../../_images/spatial_material22.png

Преломление (рефрацкция)

Эта функция доступна только при использовании бэкенда GLES3

Когда включена функция преломления, она заменяет альфа-смешивание, и вместо этого Godot пытается извлечь информацию из-за визуализируемого объекта. Это позволяет искажать прозрачность способом, аналогичным преломлению в реальной жизни.

Remember to use a transparent albedo texture (or reduce the albedo color's alpha channel) to make refraction visible, as refraction relies on transparency to have a visible effect.

A normal map can optionally be specified in the Refraction Texture property to allow distorting the refraction's direction on a per-pixel basis.

../../_images/spatial_material23.png

Примечание

Refraction is implemented as a screen-space effect and forces the material to be transparent. This makes the effect relatively fast, but this results in some limitations:

  • Transparency sorting issues may occur.

  • The refractive material cannot refract onto itself, or onto other transparent materials. A refractive material behind another transparent material will be invisible.

  • Off-screen objects cannot appear in the refraction. This is most noticeable with high refraction strength values.

  • Opaque materials in front of the refractive material will appear to have "refracted" edges, even though they shouldn't.

Деталь

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

../../_images/spatial_material24.png

Существует несколько настроек, которые управляют тем, как используется детализация.

Маска детализации: это черно-белое изображение, используемое для управления тем, где происходит смешивание текстуры. Белый - для текстур деталей, черный - для обычных текстур материалов, различные оттенки серого - для частичного смешивания текстур материалов и текстур деталей.

Режим наложения: Эти четыре режима управляют тем, как текстуры смешиваются вместе.

  • Смешивание: Объединяет значения пикселей обеих текстур. В черном цвете отображается только текстура материала, в белом - только текстура деталей. Значения серого создают плавное смешение между ними.

  • Добавить: Добавляет пиксельные значения одной текстуры к другой. В отличие от режима смешивания обе текстуры полностью смешиваются на белых участках маски и не смешиваются на серых участках. Оригинальная текстура в основном остается неизменной на черных участках

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

  • Mul: Перемножает номера каналов RGB для каждого пикселя из верхней текстуры со значениями для соответствующего пикселя из нижней текстуры.

Albedo: Поместите сюда текстуру альбедо, которую вы хотите смешать. Если этот слот останется пустым, то цвет будет белым по умолчанию.

Normal: Сюда помещается нормальная текстура, которую вы хотите смешать. Если в этом слоте ничего нет, он будет интерпретироваться как плоская карта нормалей. Это можно использовать, даже если в материале не включена карта нормалей.

UV1 и UV2

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

Трёхплоскостное наложение

Трёхплоскостное наложение выполнимо как для UV1, так и для UV2. Это другой способ определения текстурных координат, известный также как "автотекстурирование". Текстуры выбираются по X, Y и Z и смешиваются по нормали. Трёхплоскостное наложение может быть выполнено как в местных, так и в мировых координатах.

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

../../_images/spatial_material25.png

Приближение и отдаление

Godot позволяет материалам выцветать из-за близости друг к другу, а также в зависимости от расстояния до зрителя. Эффект приближения полезен для таких эффектов, как мягкие частицы или масса воды с плавным переходом к берегам. Дистанционное затухание полезно для световых лучей или индикаторов, которые присутствуют только после заданного расстояния.

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

../../_images/spatial_material_proxfade.gif

Приоритет рендеринга

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