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.

Частичні шейдери

Шейдери частинок – це спеціальний тип шейдерів, який запускається перед малюванням об'єкта. Вони використовуються для обчислення властивостей матеріалу, таких як колір, положення та обертання. Їх можна малювати з будь-яким звичайним матеріалом для CanvasItem або Spatial, залежно від того, чи є вони 2D чи 3D.

Частичні шейдери унікальні, оскільки вони не використовуються для малювання самого об'єкта; вони використовуються для обчислення властивостей частинок, які потім використовуються шейдером CanvasItem або Spatial. Вони містять дві функції процесора: start() і process().

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

Примітка

Шейдери частинок доступні лише для вузлів частинок на основі GPU (GPUParticles2D і GPUParticles3D).

Вузли частинок на основі процесора (CPUParticles2D і CPUParticles3D) відображаються на графічному процесорі (це означає, що вони можуть використовувати власні шейдери CanvasItem або Spatial), але їхній рух імітується на ЦП.

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

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

Опис

Keep_data

Не очищайте попередні дані під час перезавантаження.

Disable_force

Вимкнути силу притягання.

Disable_velocity

Ігнорувати значення VELOCITY.

Collision_use_scale

Масштабуйте розмір частинок для зіткнень.

Вбудовані

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

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

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

Вбудований

Опис

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). Число Ейлера, основа натурального логарифма.

Вбудовані функції запуску та обробки

Доступ до цих властивостей можна отримати за допомогою функцій start() і process().

Function

Опис

In float LIFETIME

Час життя частинки.

In float DELTA

Час процесу дельта.

In uint NUMBER

Унікальний номер з початку емісії.

In uint INDEX

Індекс частинок (від загальної кількості частинок).

In mat4 EMISSION_TRANSFORM

Перетворення емітера (використовується для нелокальних систем).

In uint RANDOM_SEED

Випадкове початкове число використовується як основа для випадкового.

Inout bool ACTIVE

true, коли частинка активна, може бути встановлено на false.

Inout vec4 COLOR

Колір частинок можна записати та отримати доступ до нього у функції vertex сітки.

Inout vec3 VELOCITY

Швидкість частинок може бути змінена.

Inout mat4 TRANSFORM

Перетворення частинок.

Inout vec4 CUSTOM

Дані про користувацькі частинки. Доступні з шейдера сітки як INSTANCE_CUSTOM.

Inout float MASS

Маса частинки, призначена для використання з атракторами. За замовчуванням 1.0.

In vec4 USERDATAX

Вектор, який дозволяє інтегрувати додаткові дані, визначені користувачем, у шейдер процесу частинок. USERDATAX — це шість вбудованих елементів, ідентифікованих за номером, X може бути числами від 1 до 6, наприклад USERDATA3.

In uint FLAG_EMIT_POSITION

Прапорець для останнього аргументу функції emit_subparticle() для призначення позиції перетворенню нової частинки.

In uint FLAG_EMIT_ROT_SCALE

Прапорець для останнього аргументу функції emit_subparticle() для призначення обертання та масштабу перетворенню нової частинки.

In uint FLAG_EMIT_VELOCITY

Прапорець для останнього аргументу функції emit_subparticle() для призначення швидкості новій частинці.

In uint FLAG_EMIT_COLOR

Прапорець для останнього аргументу функції emit_subparticle() для призначення кольору новій частинці.

In uint FLAG_EMIT_CUSTOM

Прапорець для останнього аргументу функції emit_subparticle() для призначення власного вектора даних новій частинці.

In vec3 EMITTER_VELOCITY

Швидкість вузла Particles2D (3D).

In float INTERPOLATE_TO_END

Значення властивості interp_to_end (3D) вузла Particles.

In uint AMOUNT_RATIO

Значення властивості amount_ratio (3D) вузла Particles.

Примітка

Щоб використовувати змінну COLOR у StandardMaterial3D, встановіть vertex_color_use_as_albedo значення true. У ShaderMaterial отримуйте доступ до нього за допомогою змінної COLOR.

Запустити вбудовані модулі

Вбудований

Опис

In bool RESTART_POSITION

true, якщо частинку перезапущено або випущено без спеціальної позиції (тобто цю частинку було створено emit_subparticle() без прапора FLAG_EMIT_POSITION).

In bool RESTART_ROT_SCALE

true, якщо частинку перезапущено або випущено без спеціального обертання чи масштабу (тобто цю частинку було створено emit_subparticle() без прапора FLAG_EMIT_ROT_SCALE).

In bool RESTART_VELOCITY

true, якщо частинку перезапущено або випущено без спеціальної швидкості (тобто цю частинку було створено emit_subparticle() без прапора FLAG_EMIT_VELOCITY).

In bool RESTART_COLOR

true, якщо частинку було перезапущено або випущено без спеціального кольору (тобто цю частинку було створено emit_subparticle() без прапора FLAG_EMIT_COLOR).

In bool RESTART_CUSTOM

true, якщо частинку перезапущено або випущено без спеціальної властивості (тобто цю частинку було створено emit_subparticle() без прапора FLAG_EMIT_CUSTOM).

Вбудовані процеси

Вбудований

Опис

In bool RESTART

true якщо поточний кадр процесу є першим для частинки.

In bool COLLIDED

true, коли частинка зіткнулася з колайдером частинок.

In vec3 COLLISION_NORMAL

Нормальний результат останнього зіткнення. Якщо зіткнення не виявлено, воно дорівнює (0.0, 0.0, 0.0).

In float COLLISION_DEPTH

Довжина нормалі останнього зіткнення. Якщо зіткнення не виявлено, вона дорівнює 0.0.

In vec3 ATTRACTOR_FORCE

Сумарна сила атракторів на цю частинку в даний момент.

Функції процесу

emit_subparticle() наразі є єдиною користувацькою функцією, що підтримується шейдерами частинок. Вона дозволяє користувачам додавати нову частинку із заданими параметрами з субемітера. Новостворена частинка використовуватиме лише ті властивості, що відповідають параметру flags. Наприклад, наступний код випромінюватиме частинку із заданим положенням, швидкістю та кольором, але без заданого обертання, масштабу та користувацького значення:

mat4 custom_transform = mat4(1.0);
custom_transform[3].xyz = vec3(10.5, 0.0, 4.0);
emit_subparticle(custom_transform, vec3(1.0, 0.5, 1.0), vec4(1.0, 0.0, 0.0, 1.0), vec4(1.0), FLAG_EMIT_POSITION | FLAG_EMIT_VELOCITY | FLAG_EMIT_COLOR);

Function

Опис

bool emit_subparticle (mat4 xform, vec3 velocity, vec4 color, vec4 custom, uint flags)

Випромінює частинку з підвипромінювача.