Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Просторові шейдери

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

Режими візуалізації

Для наочних прикладів цих режимів візуалізації див Standard Material 3D and ORM Material 3D.

Режим візуалізації

Опис

Blend_mix

Режим змішування (альфа — це прозорість), за замовчуванням.

Blend_add

Режим адитивного змішування.

Blend_sub

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

Blend_mul

Мультиплікативний режим змішування.

Blend_premul_alpha

Режим альфа-змішування з попереднім множенням (повністю прозорий = додати, повністю непрозорий = змішати).

Depth_draw_opaque

Намалюйте глибину лише для непрозорої геометрії (не прозорої).

Depth_draw_always

Завжди малюйте глибину (непрозору та прозору).

Depth_draw_never

Ніколи не малюйте глибину.

Depth_prepass_alpha

Виконайте попередній проход непрозорої глибини для прозорої геометрії.

Depth_test_disabled

Вимкнути перевірку глибини.

depth_test_default

Тест глибини відкидає піксель, якщо він знаходиться позаду інших пікселів. Тільки у Forward+ піксель також відкидається, якщо він знаходиться на тій самій глибині, що й інший піксель.

depth_test_inverted

Тест глибини відкидає піксель, якщо він знаходиться перед іншими пікселями. Корисно для трафаретних ефектів.

sss_mode_skin

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

Cull_back

Вилучити зворотні грані (за замовчуванням).

Cull_front

Вибракуйте передні особи.

Cull_disabled

Вибракування вимкнено (двостороннє).

Unshaded

Результат - просто альбедо. У матеріалі не відбувається освітлення/затінення, що робить його рендеринг швидшим.

Wireframe

Geometry draws using lines (useful for troubleshooting). When using the Compatibility renderer, you must call RenderingServer.set_debug_generate_wireframes(true) before the mesh is loaded for wireframe rendering to work. In the Compatibility renderer, backface culling is always disabled in wireframe mode, while in the Forward+ and Mobile renderers, the cull mode is respected.

debug_shadow_splits

Спрямовані тіні малюються різними кольорами для кожного розбиття (корисно для усунення несправностей).

Diffuse_burley

Burley (Disney PBS) для дифузного (за замовчуванням).

Diffuse_lambert

Штрихування Ламберта для дифузного.

Diffuse_lambert_wrap

Затінення Ламберта (залежно від шорсткості) для дифузного.

Diffuse_toon

Затінення мультфільмів для дифузного.

Specular_schlick_ggx

Schlick-GGX для дзеркальних пелюсток прямого світла (за замовчуванням).

Specular_toon

Мультфільм для прямого світла дзеркальних часток.

Specular_disabled

Вимкніть дзеркальні пелюстки прямого світла. Не впливає на відбите світло (замість цього використовуйте SPECULAR = 0.0).

Skip_vertex_transform

VERTEX, NORMAL, TANGENT і BITANGENT потрібно перетворити вручну у функції vertex().

World_vertex_coords

VERTEX, NORMAL, TANGENT і BITANGENT змінено у світовому просторі замість простору моделі.

Ensure_correct_normals

Використовуйте, коли до сітки застосовується нерівномірний масштаб (примітка: наразі не реалізовано).

Shadows_disabled

Вимкнути обчислення тіней у шейдері. Шейдер не отримуватиме тіні, але все одно зможе їх відкидати.

Ambient_light_disabled

Вимкнути внески з карти навколишнього освітлення та сяйва.

Shadow_to_opacity

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

Vertex_lighting

Використовуйте освітлення на основі вершин замість попіксельного освітлення.

Particle_trails

Вмикає траєкторії при використанні на геометрії частинок.

Alpha_to_coverage

Режим альфа-згладжування, докладніше див. тут.

Alpha_to_coverage_and_one

Режим альфа-згладжування, докладніше див. тут.

Fog_disabled

Вимкніть отримання глибинного або об'ємного туману. Корисно для матеріалів blend_add, таких як частинки.

Режими трафаретів

Примітка

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

Трафаретні операції – це набір операцій, які дозволяють записувати дані в ефективний буфер з апаратним прискоренням. Зазвичай це використовується для маскування частин сцени.

Деякі з найвідоміших застосувань:

  • Контури: Замаскуйте внутрішню сітку, яка обводиться контуром, щоб уникнути внутрішніх контурів.

  • Рентген: Відображення сітки позаду інших об'єктів.

  • Портали: Малювання геометрії, яка зазвичай є «неможливою» (неевклідовою), шляхом маскування об'єктів.

Примітка

Ви можете читати лише з буфера трафарету в прозорому проході. Будь-яка спроба читати в непрозорому проході буде невдалою, оскільки ця поведінка наразі не підтримується.

Зверніть увагу, що для ефектів композитора буфер трафарету основного рендерера не можна скопіювати до власної текстури.

Режим трафарету

Опис

read

Зчитування з буфера трафарету.

write

Записати значення посилання в буфер трафарету.

write_if_depth_fail

Записати опорне значення до буфера трафарету, якщо перевірка глибини не пройшла.

compare_always

Завжди проходьте тест трафарету.

compare_equal

Пройти перевірку трафарету, якщо опорне значення дорівнює значенню буфера трафарету.

compare_not_equal

Пройти перевірку трафарету, якщо опорне значення не дорівнює значенню буфера трафарету.

compare_less

Пройти перевірку трафарету, якщо опорне значення менше за значення буфера трафарету.

compare_less_or_equal

Пройти перевірку трафарету, якщо опорне значення менше або дорівнює значенню буфера трафарету.

compare_greater

Пройти перевірку трафарету, якщо опорне значення більше, ніж значення буфера трафарету.

compare_greater_or_equal

Пройти перевірку трафарету, якщо опорне значення більше або дорівнює значенню буфера трафарету.

Вбудовані

Значення, позначені як in, доступні лише для читання. Значення, помічені як out, можуть бути записані за бажанням і не обов’язково міститимуть розумні значення. Значення, помічені як inout, забезпечують розумне значення за замовчуванням і, за бажанням, можуть бути записані. До семплерів не можна писати, тому вони не позначені.

Не всі вбудовані функції доступні у всіх функціях обробки. Щоб отримати доступ до вбудованої вершини з функції fragment(), ви можете використовувати varying. Те саме стосується доступу до вбудованих фрагментів із функції light().

Глобальні вбудовані функції

Глобальні вбудовані функції доступні скрізь, включаючи спеціальні функції.

Вбудований

Опис

In float TIME

Глобальний час з моменту запуску двигуна, у секундах. Повторюється кожні 3600 секунд (що можна змінити за допомогою налаштування rollover). На нього впливає time_scale, але не пауза. Якщо вам потрібна змінна TIME, на яку не впливає шкала часу, додайте власну global shader uniform та оновлюйте її кожного кадру.

у float PI

Константа типу PI (3,141592). Відношення довжини кола до його діаметра та кількість радіан за півоберту.

у float TAU

Константа типу TAU (6.283185). Еквівалентна PI * 2 та кількості радіан у повному оберті.

у float E

Константа E (2.718281). Число Ейлера, основа натурального логарифма.

In bool OUTPUT_IS_SRGB

true, коли виводиться в просторі кольорів sRGB (це true у рендерері сумісності, false у Forward+ і Mobile).

у float CLIP_SPACE_FAR

Відсічене значення дальнього значення z. У програмах візуалізації Forward+ або Mobile це 0.0. У засобі відтворення сумісності це -1.0.

in bool IS_MULTIVIEW

true when output is stereoscopic (XR), false when output is monoscopic.

in bool IN_SHADOW_PASS

true when the shader is being rendered in a shadow mapping pass, false otherwise. This can be used to render objects differently in shadow maps compared to their regular rendering.

Вбудовані вершини

Дані вершин (VERTEX, NORMAL, TANGENT і BITANGENT) представлені в просторі моделі (також називається локальним простором). Якщо не записувати, ці значення не буде змінено та передано, як вони надійшли, а потім перетворено у простір перегляду для використання у fragment().

Додатково їх можна представити у світовому просторі за допомогою режиму візуалізації world_vertex_coords.

Користувачі можуть вимкнути вбудоване перетворення представлення моделі (проекція все одно відбудеться пізніше) і зробити це вручну за допомогою такого коду:

shader_type spatial;
render_mode skip_vertex_transform;

void vertex() {
    VERTEX = (MODELVIEW_MATRIX * vec4(VERTEX, 1.0)).xyz;
    NORMAL = normalize((MODELVIEW_MATRIX * vec4(NORMAL, 0.0)).xyz);
    BINORMAL = normalize((MODELVIEW_MATRIX * vec4(BINORMAL, 0.0)).xyz);
    TANGENT = normalize((MODELVIEW_MATRIX * vec4(TANGENT, 0.0)).xyz);
}

Інші вбудовані функції, такі як UV, UV2 і COLOR, також передаються до функції fragment(), якщо не змінено.

Користувачі можуть змінювати перетворення представлення моделі та проекції за допомогою вбудованої функції POSITION. Якщо POSITION записане в будь-якому місці шейдера, воно завжди використовуватиметься, тому користувач несе відповідальність за те, щоб воно завжди мало прийнятне значення. Коли використовується POSITION, значення VERTEX ігнорується, і проекція не відбувається. Однак значення, передане до фрагментного шейдера, все ще походить від VERTEX.

Для створення екземплярів змінна INSTANCE_CUSTOM містить користувацькі дані екземпляра. При використанні частинок ця інформація зазвичай така:

  • x: Кут повороту в радіанах.

  • y: Фаза протягом життя (0,0 до 1,0).

  • z: рамка анімації.

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

Вбудований

Опис

у vec2 VIEWPORT_SIZE

Розмір вікна перегляду (у пікселях).

in mat4 VIEW_MATRIX

Світовий простір для перегляду космічного перетворення.

in mat4 INV_VIEW_MATRIX

Перетворення простору погляду на світовий простір.

In mat4 MAIN_CAM_INV_VIEW_MATRIX

Трансформація простору перегляду у світовий простір камери, що використовується для малювання поточної області перегляду.

In mat4 INV_PROJECTION_MATRIX

Обрізайте простір, щоб переглянути трансформацію простору.

in vec3 NODE_POSITION_WORLD

Положення вузла, у світовому просторі.

in vec3 NODE_POSITION_VIEW

Положення вузла, у просторі огляду.

in vec3 CAMERA_POSITION_WORLD

Положення камери у світовому просторі. Відображає середню точку двох очей у режимі багатовидового/стереорендерингу.

in vec3 CAMERA_DIRECTION_WORLD

Напрямок камери, у світовому просторі.

In uint CAMERA_VISIBLE_LAYERS

Вилучити шари камери, що рендерить поточний прохід.

In int INSTANCE_ID

Ідентифікатор екземпляра для створення екземпляра.

In vec4 INSTANCE_CUSTOM

Користувацькі дані екземпляра (переважно для частинок).

in int VIEW_INDEX

Вид, який ми представляємо. VIEW_MONO_LEFT (0) для моно (не мультиракурсу) або лівого ока, VIEW_RIGHT (1) для правого ока.

In int VIEW_MONO_LEFT

Константа для моно або лівого ока, завжди 0.

In int VIEW_RIGHT

Константа для правого ока, завжди 1.

In vec3 EYE_OFFSET

Зсув позиції для ока, що рендериться, у просторі перегляду. Застосовується лише для багатовидового рендерингу.

Inout vec3 VERTEX

Положення вершини в просторі моделі. У світовому просторі, якщо використовується world_vertex_coords.

In int VERTEX_ID

Індекс поточної вершини в буфері вершин.

Inout vec3 NORMAL

Нормальний у модельному просторі. У світовому просторі, якщо використовується world_vertex_coords.

Inout vec3 TANGENT

Дотична в просторі моделі. У світовому просторі, якщо використовується world_vertex_coords.

Inout vec3 BINORMAL

Бінормаль у просторі моделі. У світовому просторі, якщо використовується world_vertex_coords.

Out vec4 POSITION

If written to on any branch, overrides final vertex position in clip space.

Inout vec2 UV

Основний УФ канал.

Inout vec2 UV2

УФ вторинний канал.

Inout vec4 COLOR

Колір від вершин. Обмежено значеннями від 0.0 до 1.0 для кожного каналу та точністю 8 біт на канал (256 можливих рівнів). Підтримується альфа-канал. Значення поза дозволеним діапазоном обмежуються, а значення можуть бути округлені через обмеження точності. Використовуйте CUSTOM0-CUSTOM3 для передачі даних з більшою точністю, якщо це необхідно.

Out float ROUGHNESS

Шорсткість для вершинного освітлення.

Inout float POINT_SIZE

Розмір точки для відтворення точки.

Inout mat4 MODELVIEW_MATRIX

Модель/локальний простір для перегляду трансформації простору (використовуйте, якщо можливо).

Inout mat3 MODELVIEW_NORMAL_MATRIX

In mat4 MODEL_MATRIX

Перетворення моделі/локального простору у світовий простір.

In mat3 MODEL_NORMAL_MATRIX

Inout mat4 PROJECTION_MATRIX

Перегляд простору для перетворення простору кліпу.

In uvec4 BONE_INDICES

In vec4 BONE_WEIGHTS

In vec4 CUSTOM0

Спеціальне значення з примітиву вершини. При використанні додаткових UV, xy є UV3 і zw є UV4.

In vec4 CUSTOM1

Спеціальне значення з примітиву вершини. При використанні додаткових УФ, xy дорівнює UV5, а zw дорівнює UV6.

In vec4 CUSTOM2

Спеціальне значення з примітиву вершини. При використанні додаткових УФ, xy дорівнює UV7, а zw дорівнює UV8.

In vec4 CUSTOM3

Спеціальне значення з примітиву вершини.

out float Z_CLIP_SCALE

If written to on any branch, scales the vertex towards the camera to avoid clipping into things like walls. Lighting and shadows will continue to work correctly when this is written to, but screen-space effects like SSAO and SSR may break with lower scales. Try to keep this value as close to 1.0 as possible.

Примітка

MODELVIEW_MATRIX поєднує як MODEL_MATRIX, так і VIEW_MATRIX і краще підходить, коли можуть виникнути проблеми з плаваючою комою. Наприклад, якщо об’єкт знаходиться дуже далеко від джерела світу, ви можете зіткнутися з проблемами з плаваючою комою під час використання розділених MODEL_MATRIX і VIEW_MATRIX.

Примітка

INV_VIEW_MATRIX — це матриця, яка використовується для відтворення об’єкта в цьому проході, на відміну від MAIN_CAM_INV_VIEW_MATRIX, яка є матрицею камери в сцені. У тіньовому проході вид INV_VIEW_MATRIX базується на камері, розташованій у місці світла.

Фрагмент вбудованих

За замовчуванням функція процесора фрагментів Godot використовується для налаштування властивостей матеріалу вашого об’єкта та дозволу вбудованому рендереру виконувати остаточне затінення. Однак ви не зобов’язані використовувати всі ці властивості, і якщо ви не напишете їх, Godot оптимізує відповідні функції.

Вбудований

Опис

у vec2 VIEWPORT_SIZE

Розмір вікна перегляду (у пікселях).

In vec4 FRAGCOORD

Coordinate of pixel center in screen space. xy specifies position in window. Upper-left of the viewport is the origin, (0.0, 0.0). Bottom-right of the viewport is (1.0, 1.0). z specifies fragment depth. It is also used as the output value for the fragment depth unless DEPTH is written to.

In bool FRONT_FACING

true, якщо поточне обличчя спрямоване спереду, false інакше.

In vec3 VIEW

Нормований вектор від положення фрагмента до камери (у просторі огляду). Це однаково як для перспективних, так і для ортогональних камер.

In vec2 UV

UV, що надходить із функції vertex().

In vec2 UV2

UV2, який походить від функції vertex().

In vec4 COLOR

COLOR, отриманий від функції vertex().

In vec2 POINT_COORD

Координата точки для малювання точок із POINT_SIZE.

In mat4 MODEL_MATRIX

Перетворення моделі/локального простору у світовий простір.

In mat3 MODEL_NORMAL_MATRIX

Перетворення моделі/локального простору у світовий простір для нормалей. Це те саме, що MODEL_MATRIX за замовчуванням, якщо об’єкт не масштабується нерівномірно, у цьому випадку це встановлено на transpose(inverse(mat3(MODEL_MATRIX))).

in mat4 VIEW_MATRIX

Світовий простір для перегляду космічного перетворення.

in mat4 INV_VIEW_MATRIX

Перетворення простору погляду на світовий простір.

In mat4 PROJECTION_MATRIX

Перегляд простору для перетворення простору кліпу.

In mat4 INV_PROJECTION_MATRIX

Обрізайте простір, щоб переглянути трансформацію простору.

in vec3 NODE_POSITION_WORLD

Положення вузла, у світовому просторі.

in vec3 NODE_POSITION_VIEW

Положення вузла, у просторі огляду.

in vec3 CAMERA_POSITION_WORLD

Положення камери у світовому просторі. Відображає середню точку двох очей у режимі багатовидового/стереорендерингу.

in vec3 CAMERA_DIRECTION_WORLD

Напрямок камери, у світовому просторі.

In uint CAMERA_VISIBLE_LAYERS

Вилучити шари камери, що рендерить поточний прохід.

In vec3 VERTEX

Положення фрагмента (пікселя) у просторі огляду. Це значення VERTEX з vertex(), інтерпольоване між вершинами грані та перетворене у простір перегляду. Якщо skip_vertex_transform увімкнено, його може не бути в області перегляду.

Inout vec3 LIGHT_VERTEX

Записувана версія VERTEX, яку можна використовувати для зміни світла та тіней. Запис до цього не змінить положення фрагмента.

in int VIEW_INDEX

Вид, який ми представляємо. Використовується для розрізнення переглядів у багатопрозорому/стерео візуалізації. VIEW_MONO_LEFT (0) для моно (не мультиракурсу) або лівого ока, VIEW_RIGHT (1) для правого ока.

In int VIEW_MONO_LEFT

Константа для моно або лівого ока, завжди 0.

In int VIEW_RIGHT

Константа для правого ока, завжди 1.

In vec3 EYE_OFFSET

Зсув позиції для ока, що рендериться, у просторі перегляду. Застосовується лише для багатовидового рендерингу.

Sampler2D SCREEN_TEXTURE

Видалено в Godot 4. Замість цього використовуйте sampler2D з hint_screen_texture.

In vec2 SCREEN_UV

UV-координата екрану для поточного пікселя.

Sampler2D DEPTH_TEXTURE

Видалено в Godot 4. Замість цього використовуйте sampler2D з hint_depth_texture.

Out float DEPTH

Власне значення глибини (діапазон [0.0, 1.0]). Якщо DEPTH записане в будь-якій гілці шейдерів, то ви відповідаєте за встановлення DEPTH для всіх інших гілок. В іншому випадку графічний API залишить їх неініціалізованими.

Inout vec3 NORMAL

Звичайний, який походить від функції vertex(), у просторі перегляду. Якщо skip_vertex_transform увімкнено, його може не бути в області перегляду.

Inout vec3 TANGENT

Дотична, отримана від функції vertex(), у просторі перегляду. Якщо skip_vertex_transform увімкнено, його може бути не в області перегляду.

Inout vec3 BINORMAL

Бінормаль, що походить від функції vertex(), у просторі перегляду. Якщо skip_vertex_transform увімкнено, вона може не бути у просторі перегляду.

Out vec3 NORMAL_MAP

Set normal here in tangent space if reading normal from a texture instead of NORMAL. The blue channel is ignored, as it's reconstructed in the engine instead. This allows normal maps with RGTC compression to work.

Out float NORMAL_MAP_DEPTH

Глибина з NORMAL_MAP. За замовчуванням 1.0.

out vec3 BENT_NORMAL_MAP

Set bent normal map here in tangent space to enable bent normals. This is used to improve specular occlusion, and requires a specially authored bent normal map. The blue channel is ignored, as it's reconstructed in the engine instead. This allows bent normal maps with RGTC compression to work.

Out vec3 ALBEDO

Альбедо (за замовчуванням білий). Базовий колір.

Out float ALPHA

Альфа (діапазон [0.0, 1.0]). Якщо зчитувати з нього або записувати в нього, матеріал перейде до прозорого конвеєра.

Out float ALPHA_SCISSOR_THRESHOLD

If written to on any branch, values below a certain amount of alpha are discarded.

Out float ALPHA_HASH_SCALE

Альфа-хеш-шкала під час використання режиму прозорості альфа-хешів. За замовчуванням 1.0. Вищі значення призводять до більш видимих пікселів у шаблоні згладжування.

Out float ALPHA_ANTIALIASING_EDGE

Порогове значення, нижче якого слід використовувати згладжування альфа-покриття. За замовчуванням 0.0. Потрібен режим візуалізації alpha_to_coverage. Для ефективності має бути встановлено значення, нижче за ALPHA_SCISSOR_THRESHOLD.

Out vec2 ALPHA_TEXTURE_COORDINATE

Координата текстури, яка використовується для згладжування альфа-покриття. Потрібен режим візуалізації alpha_to_coverage. Зазвичай встановлюється на UV * vec2(albedo_texture_size), де albedo_texture_size — це розмір текстури альбедо в пікселях.

вихідний float PREMUL_ALPHA_FACTOR

Попередньо помножений альфа-фактор. Ефективно, лише якщо використовується render_mode blend_premul_alpha;. Це слід записати, коли використовується затінений матеріал із попередньо помноженим альфа-змішуванням для взаємодії з освітленням. Це не потрібно для незаштрихованих матеріалів.

Out float METALLIC

Металевий (діапазон [0.0, 1.0]).

Out float SPECULAR

Specular (фізично не точний для зміни). За замовчуванням 0,5. 0.0 вимикає відображення.

Out float ROUGHNESS

Шорсткість (діапазон [0.0, 1.0]).

Out float RIM

Обід (діапазон [0.0, 1.0]). Якщо використовується, Godot розраховує освітлення обода. Розмір обода залежить від ROUGHNESS.

Out float RIM_TINT

Відтінок обідка, діапазон від 0.0 (білий) до 1.0 (альбедо). Якщо використовується, Godot розраховує освітлення обідка.

Out float CLEARCOAT

Маленька дзеркальна крапка додана поверх існуючої. Якщо використовується, Godot розраховує прозорий лак.

Out float CLEARCOAT_GLOSS

Блиск лаку. Якщо використовується, Godot розраховує прозорий лак.

Out float ANISOTROPY

Для спотворення дзеркальної краплі відповідно до дотичного простору.

Out vec2 ANISOTROPY_FLOW

Напрям спотворення, використовуйте з картами потоку.

Out float SSS_STRENGTH

Сила підповерхневого розсіювання. Якщо використовується, до об’єкта буде застосовано підповерхневе розсіювання.

Out vec4 SSS_TRANSMITTANCE_COLOR

Колір пропускання підповерхневого розсіювання. Якщо використовується, до об’єкта буде застосовано коефіцієнт пропускання підповерхневого розсіювання.

Out float SSS_TRANSMITTANCE_DEPTH

Глибина пропускання підповерхневого розсіювання. Вищі значення дозволяють ефекту проникати глибше в об’єкт.

Out float SSS_TRANSMITTANCE_BOOST

Збільшує пропускну здатність підповерхневого розсіювання, якщо встановлено вище 0.0. Завдяки цьому ефект помітний навіть на прямо освітлених поверхнях

Inout vec3 BACKLIGHT

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

Out float AO

Сила амбієнтної оклюзії. Для використання з попередньо випеченим АО.

Out float AO_LIGHT_AFFECT

Наскільки навколишня оклюзія впливає на пряме світло (діапазон [0.0, 1.0], за замовчуванням 0.0).

Out vec3 EMISSION

Колір випромінювання (може перевищувати (1.0, 1.0, 1.0) для HDR).

Out vec4 FOG

If written to on any branch, blends final pixel color with FOG.rgb based on FOG.a.

Out vec4 RADIANCE

If written to on any branch, blends environment map radiance with RADIANCE.rgb based on RADIANCE.a.

Out vec4 IRRADIANCE

If written to on any branch, blends environment map irradiance with IRRADIANCE.rgb based on IRRADIANCE.a.

Примітка

Шейдери, що проходять через прозорий конвеєр, коли записується ALPHA, можуть виявляти проблеми з сортуванням прозорості. Прочитайте розділ transparency sorting section in the 3D rendering limitations page, щоб дізнатися більше та як уникнути проблем.

Легкі вбудовані

Написання функцій легкого процесора абсолютно необов'язкове. Ви можете пропустити функцію light(), використовуючи режим візуалізації unshaded. Якщо функція освітлення не написана, Godot використовуватиме властивості матеріалу, записані у функції fragment(), щоб обчислити освітлення для вас (залежно від режиму візуалізації).

Функція light() викликається для кожного світла в кожному пікселі. Він викликається в циклі для кожного типу світла.

Нижче наведено приклад спеціальної функції light() з використанням моделі освітлення Ламберта:

void light() {
    if (LIGHT_IS_AREA) {
        // Area light GGX shading.
        DIFFUSE_LIGHT += LIGHT_AREA_DIFFUSE_MULTIPLIER * ATTENUATION * LIGHT_COLOR;
        SPECULAR_LIGHT += LIGHT_AREA_SPECULAR_MULTIPLIER * ATTENUATION * LIGHT_COLOR * SPECULAR_AMOUNT;
    } else {
        // Used for all other light types (directional, omni, spot).
        DIFFUSE_LIGHT += clamp(dot(NORMAL, LIGHT), 0.0, 1.0) * ATTENUATION * LIGHT_COLOR / PI;
    }
}

Якщо ви хочете, щоб світло складалося разом, додайте внесок світла в DIFFUSE_LIGHT за допомогою +=, а не перезаписуйте його.

Попередження

Функція light() не запускатиметься, якщо ввімкнено режим візуалізації vertex_lighting або якщо Rendering > Quality > Shading > Force Vertex Shading увімкнено в налаштуваннях проекту. (Це ввімкнено за замовчуванням на мобільних платформах.)

Вбудований

Опис

у vec2 VIEWPORT_SIZE

Розмір вікна перегляду (у пікселях).

In vec4 FRAGCOORD

Coordinate of pixel center in screen space. xy specifies position in window. Upper-left of the viewport is the origin, (0.0, 0.0). Bottom-right of the viewport is (1.0, 1.0). z specifies fragment depth. It is also used as the output value for the fragment depth unless DEPTH is written to.

In mat4 MODEL_MATRIX

Перетворення моделі/локального простору у світовий простір.

in mat4 INV_VIEW_MATRIX

Перетворення простору погляду на світовий простір.

in mat4 VIEW_MATRIX

Світовий простір для перегляду космічного перетворення.

In mat4 PROJECTION_MATRIX

Перегляд простору для перетворення простору кліпу.

In mat4 INV_PROJECTION_MATRIX

Обрізайте простір, щоб переглянути трансформацію простору.

In vec3 NORMAL

Нормальний вектор, у просторі перегляду.

In vec2 SCREEN_UV

UV-координата екрану для поточного пікселя.

In vec2 UV

UV, що надходить із функції vertex().

In vec2 UV2

UV2, який походить від функції vertex().

In vec3 VIEW

Переглянути вектор, у просторі перегляду.

In vec3 LIGHT

Світло вектор, у просторі подання.

In vec3 LIGHT_COLOR

Light color, помножений на light energy, помножену на PI. Множення PI присутнє, оскільки фізичні моделі освітлення включають ділення на PI.

In float SPECULAR_AMOUNT

Для class_OmniLight3D і class_SpotLight3D, 2.0, помножене на light_specular. Для DirectionalLight3D, 1.0.

In bool LIGHT_IS_DIRECTIONAL

true, якщо цей пропуск є a DirectionalLight3D.

In float ATTENUATION

Затухання на основі відстані або тіні.

In vec3 ALBEDO

Базове альбедо.

In vec3 BACKLIGHT

In float METALLIC

Металік.

In float ROUGHNESS

Шорсткість.

Out vec3 DIFFUSE_LIGHT

Результат розсіяного світла.

Out vec3 SPECULAR_LIGHT

Результат дзеркального світла.

Out float ALPHA

Alpha (range [0.0, 1.0]). If written to on any branch, the material will go through the transparent pipeline.

Примітка

Шейдери, що проходять через прозорий конвеєр, коли записується ALPHA, можуть виявляти проблеми з сортуванням прозорості. Прочитайте розділ transparency sorting section in the 3D rendering limitations page, щоб дізнатися більше та як уникнути проблем.

Прозорі матеріали також не можуть відкидати тіні або з’являтися в уніформі hint_screen_texture і hint_depth_texture. Це, у свою чергу, запобігає появі цих матеріалів у віддзеркаленнях або заломленні в екранному просторі. SDFGI різкі відблиски не видно на прозорих матеріалах (на прозорих матеріалах видно лише грубі відблиски).