Spatial Material

Вступ

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

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

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

../../_images/add_material.png

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

Flags

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

../../_images/spatial_material1.png

Transparent (Прозорий)

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

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

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

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

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

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

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

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

Unshaded (Незатінений)

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

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

../../_images/spatial_material26.png

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

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

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

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

../../_images/spatial_material2.png

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

No Depth Test (Не перевіряти глибину)

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

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

../../_images/spatial_material3.png

Use Point Size (Використовувати розмір точок)

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

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

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

Fixed Size (Сталий розмір)

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

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

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

Disable Ambient Light (Вимкнути навколишнє світло)

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

Ensure Correct Normals (Впевнитись у правильності нормалей)

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

Vertex Color (Колір вершин)

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

../../_images/spatial_material4.png

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

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

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

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

Параметри

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

../../_images/spatial_material5.png

Diffuse Mode (Вид розсіювання світла)

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

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

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

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

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

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

../../_images/spatial_material6.png

Specular Mode (Вид відблиску)

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

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

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

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

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

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

../../_images/spatial_material7.png

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

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

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

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

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

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

../../_images/spatial_material8.png

Cull Mode

Determines which side of the object is not drawn when backfaces are rendered:

  • Back: The back of the object is culled when not visible (default).

  • Front: The front of the object is culled when not visible.

  • Disabled: Used for objects that are double-sided (no culling is performed).

Примітка

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.

Depth Draw Mode

Specifies when depth rendering must take place.

  • Opaque Only (default): Depth is only drawn for opaque objects.

  • Always: Depth draw is drawn for both opaque and transparent objects.

  • Never: No depth draw takes place (do not confuse this with the No Depth Test option above).

  • Depth Pre-Pass: For transparent objects, an opaque pass is made first with the opaque parts, then transparency is drawn above. Use this option with transparent grass or tree foliage.

../../_images/material_depth_draw.png

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

When drawing lines, specify the width of the lines being drawn. This option is not available on most modern hardware.

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

When drawing points, specify the point size in pixels.

Billboard Mode

Enables billboard mode for drawing materials. This controls how the object faces the camera:

  • Disabled: Billboard mode is disabled.

  • Enabled: Billboard mode is enabled, the object's -Z axis will always face the camera.

  • Y-Billboard: The object's X axis will always be aligned with the camera.

  • Particles: Most suited for particle systems, because it allows specifying animation options.

../../_images/spatial_material9.png

The above options are only enabled for Particle Billboard.

Billboard Keep Scale

Enables scaling a mesh in billboard mode.

Збільшити

Grows the object vertices in the direction pointed by their normals:

../../_images/spatial_material10.png

This is commonly used to create cheap outlines. Add a second material pass, make it black and unshaded, reverse culling (Cull Front), and add some grow:

../../_images/spatial_material11.png

Use Alpha Scissor

When transparency other than 0 or 1 is not needed, it's possible to set a threshold to prevent the object from rendering semi-transparent pixels.

../../_images/spatial_material12.png

This renders the object via the opaque pipeline, which is faster and allows it to use mid- and post-process effects such as SSAO, SSR, etc.

Material colors, maps and channels

Besides the parameters, what defines materials themselves are the colors, textures, and channels. Godot supports an extensive list of them. They are described in detail below:

Альбедо

Albedo is the base color for the material, on which all the other settings operate. When set to Unshaded, this is the only color that is visible. In previous versions of Godot, this channel was named Diffuse. The change of name mainly happened because, in PBR (Physically Based Rendering), this color affects many more calculations than just the diffuse lighting path.

Albedo color and texture can be used together as they are multiplied.

Alpha channel in albedo color and texture is also used for the object transparency. If you use a color or texture with alpha channel, make sure to either enable transparency or alpha scissoring for it to work.

Metallic

Godot uses a metallic model over competing models due to its simplicity. This parameter defines how reflective the material is. The more reflective, the less diffuse/ambient light affects the material and the more light is reflected. This model is called "energy-conserving".

The Specular parameter is a general amount for the reflectivity (unlike Metallic, this is not energy-conserving, so leave it at 0.5 and don't touch it unless you need to).

The minimum internal reflectivity is 0.04, so it's impossible to make a material completely unreflective, just like in real life.

../../_images/spatial_material13.png

Roughness

Roughness affects the way reflection happens. A value of 0 makes it a perfect mirror while a value of 1 completely blurs the reflection (simulating natural microsurfacing). Most common types of materials can be achieved with the right combination of Metallic and Roughness.

../../_images/spatial_material14.png

Emission

Emission specifies how much light is emitted by the material (keep in mind this does not include light surrounding geometry unless Using GIProbe are used). This value is added to the resulting final image and is not affected by other lighting in the scene.

../../_images/spatial_material15.png

Normal map

Normal mapping allows you to set a texture that represents finer shape detail. This does not modify geometry, only the incident angle for light. In Godot, only the red and green channels of normal maps are used for better compression and wider compatibility.

../../_images/spatial_material16.png

Примітка

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

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

Rim

Some fabrics have small micro-fur that causes light to scatter around it. Godot emulates this with the Rim parameter. Unlike other rim lighting implementations, which just use the emission channel, this one actually takes light into account (no light means no rim). This makes the effect considerably more believable.

../../_images/spatial_material17.png

Rim size depends on roughness, and there is a special parameter to specify how it must be colored. If Tint is 0, the color of the light is used for the rim. If Tint is 1, then the albedo of the material is used. Using intermediate values generally works best.

Clearcoat

This feature is only available when using the GLES3 backend.

The Clearcoat parameter is used to add a secondary pass of transparent coat to the material. This is common in car paint and toys. In practice, it's a smaller specular blob added on top of the existing material.

Анізотропія

This feature is only available when using the GLES3 backend.

This changes the shape of the specular blob and aligns it to tangent space. Anisotropy is commonly used with hair, or to make materials such as brushed aluminum more realistic. It works especially well when combined with flowmaps.

../../_images/spatial_material18.png

Ambient Occlusion

It is possible to specify a baked ambient occlusion map. This map affects how much ambient light reaches each surface of the object (it does not affect direct light by default). While it is possible to use Screen-Space Ambient Occlusion (SSAO) to generate ambient occlusion, nothing beats the quality of a well-baked AO map. It is recommended to bake ambient occlusion whenever possible.

../../_images/spatial_material19.png

Глибина

This feature is only available when using the GLES3 backend.

Setting a depth map on a material produces a ray-marched search to emulate the proper displacement of cavities along the view direction. This is not real added geometry, but an illusion of depth. It may not work for complex objects, but it produces a realistic depth effect for textures. For best results, Depth should be used together with normal mapping.

../../_images/spatial_material20.png

Subsurface Scattering

This feature is only available when using the GLES3 backend.

This effect emulates light that penetrates an object's surface, is scattered, and then comes out. It is useful to create realistic skin, marble, colored liquids, etc.

../../_images/spatial_material21.png

Transmission

This controls how much light from the lit side (visible to light) is transferred to the dark side (opposite from the light). This works well for thin objects such as plant leaves, grass, human ears, etc.

../../_images/spatial_material22.png

Refraction

This feature is only available when using the GLES3 backend.

When refraction is enabled, it supersedes alpha blending, and Godot attempts to fetch information from behind the object being rendered instead. This allows distorting the transparency in a way similar to refraction in real life.

../../_images/spatial_material23.png

Подробиці

Godot allows using secondary albedo and normal maps to generate a detail texture, which can be blended in many ways. By combining this with secondary UV or triplanar modes, many interesting textures can be achieved.

../../_images/spatial_material24.png

There are several settings that control how detail is used.

Mask: The detail mask is a black and white image used to control where the blending takes place on a texture. White is for the detail textures, Black is for the regular material textures, different shades of gray are for partial blending of the material textures and detail textures.

Blend Mode: These four modes control how the textures are blended together.

  • Mix: Combines pixel values of both textures. At black, only show the material texture, at white, only show the detail texture. Values of gray create a smooth blend between the two.

  • 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).