Spatial Material

Введение

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

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

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

../../_images/add_material.png

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

Флаги

Пространственные(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), триплан вычисляется из локального пространства объекта. Этот флаг заставляет его вычисляться из мирового пространства.

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

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

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

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

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

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

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

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

Цвет вершины

This setting allows choosing what is done by default to vertex colors that come from your 3D modelling application. By default, they are ignored.

../../_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: Используется для объектов, которые являются двусторонними (не производится выбраковка).

Примечание

By default, Blender has backface culling disabled on materials and will export materials to match how they render in Blender. This means that materials in Godot will have their cull mode set to Disabled. This can decrease performance since backfaces will be rendered, even when they are being culled by other faces. To resolve this, enable Backface Culling in Blender's Materials tab, then export the scene to glTF again.

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

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

  • 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 определяет, сколько света испускается материалом (имейте в виду, что это не включает свет, окружающий геометрию, если не используются Using GIProbe). Это значение добавляется к конечному изображению и не зависит от другого освещения в сцене.

../../_images/spatial_material15.png

Normal map

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

../../_images/spatial_material16.png

Примечание

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

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

Обод

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

../../_images/spatial_material17.png

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

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

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

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

Анизотропия

Эта функция доступна только при использовании бэкенда 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 пытается извлечь информацию из-за визуализируемого объекта. Это позволяет искажать прозрачность способом, аналогичным преломлению в реальной жизни.

../../_images/spatial_material23.png

Деталь

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

../../_images/spatial_material24.png

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

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

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

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

  • Add: Adds pixel values of one Texture with the other. Unlike mix mode both textures are completely mixed at white parts of a mask and not at gray parts. The original texture is mostly unchanged at black

  • Sub: Subtracts pixel values of one texture with the other. The second texture is completely subtracted at white parts of a mask with only a little subtraction in black parts, gray parts being different levels of subtraction based on the exact texture.

  • Mul: Multiplies the RGB channel numbers for each pixel from the top texture with the values for the corresponding pixel from the bottom texture.

Albedo: This is where you put an albedo texture you want to blend. If nothing is in this slot it will be interpreted as white by default.

Normal: This is where you put a normal texture you want to blend. If nothing is in this slot it will be interpreted as a flat normal map. This can still be used even if the material does not have normal map enabled.

UV1 and UV2

Godot supports two UV channels per material. Secondary UV is often useful for ambient occlusion or emission (baked light). UVs can be scaled and offset, which is useful when using repeating textures.

Triplanar Mapping

Triplanar mapping is supported for both UV1 and UV2. This is an alternative way to obtain texture coordinates, sometimes called "Autotexture". Textures are sampled in X, Y and Z and blended by the normal. Triplanar mapping can be performed in either world space or object space.

In the image below, you can see how all primitives share the same material with world triplanar, so the brick texture continues smoothly between them.

../../_images/spatial_material25.png

Proximity and distance fade

Godot allows materials to fade by proximity to each other as well as depending on the distance from the viewer. Proximity fade is useful for effects such as soft particles or a mass of water with a smooth blending to the shores. Distance fade is useful for light shafts or indicators that are only present after a given distance.

Keep in mind enabling these enables alpha blending, so abusing them for an entire scene is usually not a good idea.

../../_images/spatial_material_proxfade.gif

Render priority

The rendering order of objects can be changed, although this is mostly useful for transparent objects (or opaque objects that perform depth draw but no color draw, such as cracks on the floor).