Частичні шейдери
Частичні шейдери — це особливий тип шейдерів, який запускається перед малюванням об’єкта. Вони використовуються для розрахунку властивостей матеріалу, таких як колір, положення та обертання. Вони малюються будь-яким звичайним матеріалом для CanvasItem або Spatial, залежно від того, 2D чи 3D.
Частичні шейдери унікальні, оскільки вони не використовуються для малювання самого об'єкта; вони використовуються для обчислення властивостей частинок, які потім використовуються шейдером CanvasItem або Spatial. Вони містять дві функції процесора: start() і process().
На відміну від інших типів шейдерів, частинкові шейдери зберігають дані, які були виведені в попередньому кадрі. Таким чином, часткові шейдери можна використовувати для складних ефектів, які відбуваються в кількох кадрах.
Примітка
Шейдери частинок доступні лише для вузлів частинок на основі GPU (GPUParticles2D і GPUParticles3D).
Вузли частинок на основі процесора (CPUParticles2D і CPUParticles3D) відображаються на графічному процесорі (це означає, що вони можуть використовувати власні шейдери CanvasItem або Spatial), але їхній рух імітується на ЦП.
Режими візуалізації
Режим візуалізації |
Опис |
|---|---|
Keep_data |
Не очищайте попередні дані під час перезавантаження. |
Disable_force |
Вимкнути силу притягання. |
Disable_velocity |
Ігнорувати значення |
Collision_use_scale |
Масштабуйте розмір частинок для зіткнень. |
Вбудовані
Значення, позначені як in, доступні лише для читання. Значення, помічені як out, можуть бути записані за бажанням і не обов’язково міститимуть розумні значення. Значення, помічені як inout, забезпечують розумне значення за замовчуванням і, за бажанням, можуть бути записані. До семплерів не можна писати, тому вони не позначені.
Глобальні вбудовані функції
Глобальні вбудовані функції доступні скрізь, включаючи спеціальні функції.
Вбудований |
Опис |
|---|---|
In float TIME |
Глобальний час із моменту запуску двигуна, у секундах. Він повторюється кожні |
у float PI |
Константа |
у float TAU |
Константа |
у float E |
Константа |
Вбудовані функції запуску та обробки
Доступ до цих властивостей можна отримати за допомогою функцій 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 |
|
Inout vec4 COLOR |
Колір частинок, можна записати та отримати доступ у функції вершини сітки. |
Inout vec3 VELOCITY |
Швидкість частинок може бути змінена. |
Inout mat4 TRANSFORM |
Перетворення частинок. |
Inout vec4 CUSTOM |
Спеціальні дані про частинки. Доступний із шейдера сітки як |
Inout float MASS |
Маса частинок, призначена для використання з атракторами. За замовчуванням дорівнює |
In vec4 USERDATAX |
Вектор, який дозволяє інтегрувати додаткові дані, визначені користувачем, у шейдер процесу частинок. |
In uint FLAG_EMIT_POSITION |
Прапорець для використання в останньому аргументі функції |
In uint FLAG_EMIT_ROT_SCALE |
Прапорець для використання в останньому аргументі функції |
In uint FLAG_EMIT_VELOCITY |
Прапорець для використання в останньому аргументі функції |
In uint FLAG_EMIT_COLOR |
Прапорець для використання в останньому аргументі функції |
In uint FLAG_EMIT_CUSTOM |
Прапорець для використання в останньому аргументі функції |
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 |
|
In bool RESTART_ROT_SCALE |
|
In bool RESTART_VELOCITY |
|
In bool RESTART_COLOR |
|
In bool RESTART_CUSTOM |
|
Вбудовані процеси
Вбудований |
Опис |
|---|---|
In bool RESTART |
|
In bool COLLIDED |
|
In vec3 COLLISION_NORMAL |
Нормальний результат останнього зіткнення. Якщо зіткнення не виявлено, воно дорівнює |
In float COLLISION_DEPTH |
Довжина нормалі останнього зіткнення. Якщо зіткнення не виявлено, воно дорівнює |
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) |
Випромінює частинку з підвипромінювача. |