Spatial Material

Вступ

SpatialMaterial (просторовий матеріял) — це стандартний 3D матеріял, який дозволяє вам створювати безліч гарних матеріялів без необхідності писати код шейдера. За необхідності, з нього можна дістати код і дописати його так, як вам заманеться.

В цьому уроці описані більшість параметрів наявних у SpatialMaterial.

Є три способи додати SpatialMaterial до об'єкта. Можна додати його до властивості Material геометричної сіті (mesh). Також його можна додати до властивости Material самого вузла який використовує геометрію (як-от вузол MeshInstance), чи до властивості Material Override того ж вузла.

../../_images/add_material.png

Якщо ви додали матеріял до геометричної сіті, то кожного разу, коли ви використовуватимете цю геометрію, вона матиме той матеріял. Якщо додасте матеріял до самого вузла, то лише той вузол і матиме обраний матеріял. Він також використовуватиметься замість матеріялу тої геометрії, що додана до вузла. А якщо ж ви додасте метеріял до властивості Material Override вузла, то він також використовуватиметься лише тим вузлом. Матеріял відображатиметься як замість матеріялу самого вузла, так і замість матеріялу геометрії використаної цим вузлом.

Властивість Material Overlay відтворить матеріал поверх поточного, який використовується сіткою. Як приклад, це можна використати для створення ефекту прозорого щита на сітці.

Прапорці

Просторовий матеріял має багато ключів, якими можна позначити як він використовуватиметься.

../../_images/spatial_material1.png

Прозорість

В Godot, матеріял не буде прозорим, якщо його явно не зробити таким. Основна причина — прозорі матеріяли потрібно відображати в інший спосіб у порівнянні з непрозорими матеріялами (їх потрібно відображати в правильному порядку: від тих що далі, до тих, що ближче).

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

Саме тому матеріяли в Godot вважаються непрозорими до тих пір, поки не буде вказане протилежне. Головні налаштування, які вмикають прозорість:

  • Ключ Transparent (про який і ведеться мова в цьому параграфі)

  • Будь-який режим змішування (Blend mode) окрім „Mix“

  • Увімкнене згасання за дальністю чи близькістю

Use Shadow to Opacity (Використовувати тінь як видимість)

Світло змінює альфа канал так щоби зробити видимою лише затінену частину об'єкта. Може знадобитись, якщо потрібно накласти тінь відео з камери в доповненій реальності.

Без тіней

У більшости випадків поверхня об'єктів повинна реагувати на світло (бути затіненою).

Проте, в деяких випадках, вам може знадобитись показати лише справжній колір об'єкта (albedo) без впливу освітлення. Увімкнення цього ключа прибере всі тіні й покаже чистий колір.

../../_images/spatial_material26.png

Vertex Lighting (Повершинне освітлення)

Завдяки попередній підготовці глибини (depth pre-pass) обрахування освітлення кожного пікселя в Godot приблизно однакове по складності. Освітлення обчислюється для кожного пікселя окремо.

А раз ці важкі обчислення можуть знизити продуктивність роботи програми, у випадках на зразок відмальовки декількох шарів прозорості (таке часто трапляється із системами частинок), то тоді вам може бути варто обрати повершинне освітлення.

До того ж, на слабших мобільних пристроях, повершинне освітлення допоможе підвищити продуктивність роботи вашої програми.

../../_images/spatial_material2.png

Пам'ятайте, що коли увімкнене повершинне освітлення, лише напрямлені джерела світла можуть створювати тіні (це зроблено з питань ефективности).

Без перевірки глибини

Щоб ближні об'єкти показувались поверх дальніх об'єктів, проводиться перевірка глибини. Якщо її вимкнути, то об'єкти можуть з'являтись поверх всього іншого (або за ним).

Є сенс це робити, для того щоб намалювати якісь позначки у просторі поверх об'єктів. Функція чудово працює в парі із параметром матеріялу Render Priority (Порядок Відображення) про який написано нижче.

../../_images/spatial_material3.png

Розмір крапки

Ця опція має користь лише якщо геометрія об'єкта складається з точок (зазвичай, в імпортованих з 3D редакторів геометричних сітей, вона складається з трикутників). Якщо так, то розмір цих точок можна змінювати (див. нижче).

World Triplanar (Триплощинна проєкція світового простору)

Коли ви використовуєте триплощинну проєкцію текстур (див. нижче в абзаці про UV1 та UV2), то площини проєкції визначаються відносно особистого простору об'єкта. Якщо ж ця опція увімкнена — відносно світового простору.

Незмінний розмір

Робить так, щоб об'єкт завжди відображався одного розміру, не залежно від того, як далеко він знаходиться. Може стати в нагоді, якщо потрібно додати якісь позначки чи написи до сцени (з відключеною перевіркою глибини та високим порядком відображення).

Do Not Receive Shadows (Не отримувати тіні)

Тіні від інших об'єктів не будуть показані на цьому об'єкті.

Вимкнути розсіяне світло

Об'єкт більше не освітлюється навколишнім світлом.

Забезпечити коректні нормалі

Виправляє нормалі, якщо вони нерівномірно відмасштабовані.

Вершина

Налаштування дозволяє вибрати, що робити із кольорами вершин. За замовчуванням, вони не використовуються.

../../_images/spatial_material4.png

Use as Albedo (Використати як колір поверхні)

Якщо обрана ця опція: колір вершин буде кольором поверхні.

Is sRGB (Сприймати як sGRB)

Більшість 3D редакторів працює з кольорами вершин в режимі sRGB. Тому цей параметр може допомогти правильно відобразити.

Параметри

Ще, SpatialMaterial має декілька параметрів, змінюючи які, можна регулювати процес відображення:

../../_images/spatial_material5.png

Режим розсіювання

Визначає алгоритм, за яким обчислюється взаємодія поверхні зі світлом, яке падає на неї. Стандартний — Burley. Є також й інші варіанти:

  • Burley — стандартний режим, фізично коректне відображення розроблене у компанії Disney.

  • Lambert — не враховує шершавість матеріялу.

  • Lambert Wrap — розширює метод Lambert, так щоб він покривав більше 90 градусів поверхні, при збільшенні шершавости. Чудово працює з волоссям та якщо потрібно швидко симулювати підповерхневе розсіювання. Цей метод зберігає „енергію світла“.

  • Oren Nayar — враховує мікроскопічні деталі на поверхні об'єкта (вони визначаються через шершавість). Підходить для речовин на зразок глини чи деяких видів тканини.

  • Toon — робить освітлення поділеним на чіткі шари. Шершавість тепер визначає наскільки плавними є переходи між цими шарами. Щоб він краще виглядав, варто вимкнути вплив світла від неба в налаштуваннях просторового світла (ambient light settings) або ж вимкнути просторове світло в налаштуваннях конкретного матеріялу.

../../_images/spatial_material6.png

Режим віддзеркалення

Визначає, яким чином відображати відблиск світла на поверхні об'єкта.

  • ShlickGGX — найпоширеніший спосіб відображення відблиску.

  • Blinn — зараз більше не використовується, але колись був дуже поширеним.

  • Phong — так само, як і попередній.

  • Toon — створює чітку пляму в мультяшному стилі. Її розмір залежить від параметра шершавости.

  • Disabled — іноді ніяких плям взагалі не потрібно. Геть!

../../_images/spatial_material7.png

Режим змішування

Регулює змішування матеріялу. Пам'ятайте, що прозорі об'єкти будуть такими лише в режимі Mix.

  • Mix — режим змішування за замовчуванням, альфа канал регулює видимість об'єкта.

  • Add — об'єкт додається поверх інших, підходить для спалахів та вогнів.

  • Sub — об'єкт віднімається.

  • Mul — об'єкт множиться.

../../_images/spatial_material8.png

Режим вибракування

Визначає, яка сторона об'єкта не малюється, при рендері задньої сторони:

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

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

  • Disabled: Використовується для двосторонніх об'єктів (вибракування не виконується).

Примітка

За замовчуванням у Blender вимкнено відсіювання задньої поверхні для матеріалів і експортуватиме матеріали відповідно до того, як вони відображаються в Blender. Це означає, що для матеріалів у Godot буде встановлено режим відбирання ** Disabled**. Це може знизити продуктивність, оскільки зворотні грані будуть відтворюватися, навіть якщо їх перекривають інші грані. Щоб вирішити цю проблему, увімкніть ** Backface Culling** на вкладці Materials в Blender, а потім знову експортуйте сцену до gITF.

Режим малювання глибини

Вказує, коли має відбутися відтворення глибини.

  • **Opaque Only (за замовчуванням):**Глибина малюється тільки для непрозорих об'єктів.

  • Always: Глибина малюється і для непрозорих, і для прозорих, об'єктів.

  • Never: Глибина не малюється зовсім (не плутайте з параметром No Depth Test).

  • Depth Pre-Pass: Для об'єктів з прозорістю спочатку робиться прохід по непрозорих деталях, вже потім поверх них опрацьовується прозорість. Використовуйте цей варіант для прозорої трави, або листя дерев.

../../_images/material_depth_draw.png

Товщина лінії

Під час малювання ліній вкажіть їх ширину. Цей параметр недоступний на більшості сучасних устаткувань.

Розмір крапки

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

Режим розголосника

Вмикає режим розголосника для малювання матеріалів. Визначає, як об'єкт повертається до камери:

  • Disabled: Режим розголосника вимкнений.

  • Enabled: Режим розголосника ввімкнений, у об'єкта вісь -Z завжди буде повернута до камери.

  • Y-Billboard: У об'єкта вісь X завжди буде вирівняна з камерою.

  • Particles: Найбільше підходить для систем частинок, оскільки дозволяє вказувати параметри анімації.

../../_images/spatial_material9.png

Наведені вище параметри доступні лише для Particle Billboard.

Зберегти масштаб розголосника

Вмикає масштабування моделі в режимі розголосника.

Збільшити

Переміщує вершини об'єкта в напрямку, в якому вказують їх нормалі:

../../_images/spatial_material10.png

Зазвичай використовується для створення дешевих контурів. Додайте другий прохід матеріалу, зробіть його чорним і незалежним від тіней (галочка unshaded), задайте вибракування звороту (Cull Mode > Front), і додайте трохи Grow Amount:

../../_images/spatial_material11.png

Використання альфа-ножиць

Якщо прозорість, відмінна від 0, або 1, не потрібна, можна встановити поріг, щоб запобігти відображенню напівпрозорих пікселів об'єкта.

../../_images/spatial_material12.png

Таким чином малюються лише непрозорі пікселі, що є швидше і дозволяє використовувати ефекти до проміжних та завершених результатів, такі як SSAO, SSR тощо.

Кольори матеріалу, карти і канали

Крім цих параметрів, матеріали визначають кольори, текстури та канали. Godot підтримує великий їх список. Вони детально описані нижче:

Альбедо

Albedo - основний колір матеріалу, на якому працюють всі інші налаштування. Якщо встановлено значення Unshaded, то це єдиний видимий колір. У попередніх версіях Godot цей канал називався Diffuse. Зміна назви відбулася в основному тому, що в PBR (фізично вірний рендеринг) цей колір впливає на набагато більше обчислень, ніж просто дифузний шлях освітлення.

Колір Альбедо і текстуру можна використовувати разом, бо вони множаться.

Alpha channel в кольорі альбедо і текстурі також використовується для прозорості об'єкта. Якщо ви використовуєте колір, або текстуру, з альфа-каналом, переконайтеся, що ви ввімкнули прозорість, або альфа-ножиці, щоб вона працювала.

Метал

Godot використовує модель металу замість конкуруючих моделей через простоту. Цей параметр визначає, наскільки рефлексивним є матеріал. Чим більша рефлексія, тим менше дифузне/навколишнє світло впливає на матеріал і тим більше світла відбивається. Ця модель називається "енергозберігаючою".

Параметр Specular є загальною величиною рефлексії (на відміну від Metallic, він не є енергозберігаючим, тому залиште його на 0.5 і не чіпайте, якщо вам цього не потрібно).

Мінімальна внутрішня рефлексія 0.04, тому неможливо зробити матеріал абсолютно нерефлекторним, як і в реальному житті.

../../_images/spatial_material13.png

Шорсткість

Roughness (Шорсткість) впливає на дзеркальність. Значення 0 створює ідеальне дзеркало, в той час як значення 1 повністю розмиває відображення (імітуючи природню мікро-поверхню). Найбільш поширені види матеріалів можуть бути досягнуті при правильному поєднанні Metallic і Roughness.

../../_images/spatial_material14.png

Випромінювання

Emission (Випромінювання) визначає, скільки світла випромінюється матеріалом (майте на увазі, що це не включає світло довкола геометрії, якщо не використовується Користування Зонду Глобального Освітлення). Це значення додається до отриманого остаточного зображення і не впливає на інше освітлення на сцені.

../../_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)) для створення навколишньої оклюзії, ніщо не перевершує якість добре запеченої карти оклюзії. Рекомендується, за можливості, запікати навколишню оклюзію.

../../_images/spatial_material19.png

Глибина

Ця функція доступна лише при використанні обробника GLES3.

Встановлення карти глибини на матеріалі задає рух променів, щоб імітувати належне зміщення порожнин уздовж напрямку огляду. Це не реальна додана геометрія, а ілюзія глибини. Вона може не працювати на складних об'єктах, але виробляє реалістичний ефект глибини для текстур. Для досягнення найкращих результатів глибина Depth повинна використовуватися разом із картою нормалей.

../../_images/spatial_material20.png

Підповерхневе розсіювання

Ця функція доступна лише при використанні обробника GLES3.

Цей ефект імітує світло, яке проникає в поверхню об'єкта, розсіюється, а потім виходить. Корисно для створення реалістичної шкіри, мармуру, кольорових рідин і т. д.

../../_images/spatial_material21.png

Перехід

Контролює, скільки світла від освітленої сторони (видимої світлу) переноситься на темну сторону (протилежну світлу). Добре підходить для тонких предметів, таких як листя рослин, трава, людські вуха і т. д.

../../_images/spatial_material22.png

Заломлення

Ця функція доступна лише при використанні обробника GLES3.

Коли Refraction увімкнене, воно замінює альфа-змішування, і Godot намагається отримати інформацію з-за об'єкта, що вимальовується. Дозволяє спотворити прозорість на кшталт заломлення в реальному житті.

../../_images/spatial_material23.png

Подробиці

Godot дозволяє використовувати вторинні альбедо і карти нормалей для детальних текстур, які можуть бути змішані багатьма способами. Поєднуючи їх вторинним UV, або тристоронніми режимами, можна досягти багатьох цікавих текстур.

../../_images/spatial_material24.png

Існує кілька параметрів, які визначають спосіб використання деталей.

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

Blend Mode: чотири режими накладання контролюють, як текстури змішуються разом.

  • Mix: поєднує значення пікселів обох текстур. На чорному кольорі показує тільки текстуру матеріалу, на білому, тільки текстуру деталізації. Значення сірого створюють плавне накладання між ними.

  • Add: додає піксельні значення однієї текстури до іншої. На відміну від режиму змішування обидві текстури повністю змішуються на білих частинах маски, а не сірих. Оригінальна текстура в основному не змінюється на чорному кольорі

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

  • Mul: Множить номери каналів RGB для кожного пікселя від верхньої текстури зі значеннями для відповідного пікселя з нижньої текстури.

Albedo: Сюди ви вкладете текстуру альбедо, яку хочете змішати. Якщо в цьому гнізді нічого немає, він буде інтерпретуватися за замовчуванням як білий.

Normal: Тут ви вкладете текстуру нормалей, яку хочете змішати. Якщо в цьому гнізді нічого немає, це буде інтерпретуватися як плоска карта нормалей. Це можна використовувати, навіть якщо на матеріалі не включена карта нормалей.

UV1 та UV2

Godot підтримує два UV-канали на матеріал. Другий UV часто корисний для навколишньої оклюзії, або випромінювання (запечене світло). UV можна масштабувати і зміщувати, що корисно при використанні текстур, які повторюються.

Triplanar Mapping (Тристороннє накладання)

Тристороннє накладання підтримується як для UV1, так і для UV2. Це альтернативний спосіб визначення координат текстури, відомий також, як "Автотекстура". Вибраний по X, Y і Z зразок текстури поширюється за напрямком нормалі. Тристороннє накладання може виконуватися як у світовому просторі, так і в об'єктному.

На зображенні нижче ви можете побачити тристороннє накладання одного матеріалу на всі примітиви, завдяки чому текстура цегли має плавний перехід між ними.

../../_images/spatial_material25.png

Близьке та дистанційне зникнення

Godot дозволяє матеріалам зникати в безпосередній близькості один від одного, а також в залежності від відстані до глядача. Близьке згасання корисне для таких ефектів, як м'які частинки, або води з плавним переходом в берег. Дистанційне згасання корисне для легкого світла, або індикаторів, які присутні тільки після заданої відстані.

Майте на увазі, що використання цих можливостей активує альфа-змішування, тому зловживати ними для всієї сцени, як правило, не бажано.

../../_images/spatial_material_proxfade.gif

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

Порядок візуалізації об'єктів може бути змінений, хоча це в основному корисно для прозорих об'єктів (або непрозорих об'єктів, які малюють глибину, але без кольору, наприклад, тріщини на підлозі).