Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Шейдеры частиц (particle)

Шейдеры частиц - это особый тип шейдеров, которые запускаются до отрисовки объекта. Они используются для вычисления свойств материала, таких как цвет, положение и вращение. Они рисуются вместе с любым обычным материалом для CanvasItem или Spatial, в зависимости от того, являются ли они 2D или 3D.

Шейдеры частиц уникальны тем, что они не используются для рисования самого объекта; они используются для вычисления свойств частиц, которые затем используются шейдером CanvasItem или Spatial. Они содержат две процессорные функции: start() и process().

В отличие от других типов шейдеров, шейдеры частиц сохраняют данные, которые были выведены на предыдущем кадре. Поэтому шейдеры частиц можно использовать для сложных эффектов, которые происходят в течение нескольких кадров.

Примечание

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

Узлы частиц на базе CPU (CPUParticles2D и CPUParticles3D) отрисовываются на GPU (что означает, что они могут использовать пользовательские шейдеры CanvasItem или Spatial), но их движение симулируется на CPU.

Режимы визуализации

Режим рендеринга

Описание

kеep_data

Не удаляет предыдущие данные при перезапуске.

disаble_force

Disable attractor force.

disаble_velocity

Игнорирует значение VELOCITY.

collision_use_scale

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

Встроенные функции

Значения, помеченные как "in", предназначены только для чтения. Значения, помеченные как "out", предназначены для необязательной записи и не обязательно будут содержать разумные значения. Значения, помеченные как "inout", содержат разумное значение по умолчанию и могут быть записаны по желанию. Сэмплеры не являются объектами записи и не помечаются.

Глобальные встроенные функции

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

Встроенный

Описание

in float TIME

Глобальное время в секундах.

in float PI

Константа PI (3.141592). Отношение окружности круга к его диаметру и количество радианов в половине оборота.

in float TAU

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

in float E

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

Встроенные Start и Process

Доступ к этим свойствам можно получить как из функций start(), так и из process().

Функция

Описание

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

Цвет частицы можно записать и получить к нему доступ в вершинной функции сетки.

inout vec3 VELOCITY

Скорость частиц, может быть изменена.

inout mat4 TRANSFORM

Преобразование частиц.

inout vec4 CUSTOM

Пользовательские данные о частицах. Доступны из шейдера сетки как INSTANCE_CUSTOM.

inout float MASS

Масса частицы, предназначенная для использования с аттракторами. По умолчанию равна 1.0.

in vec4 USERDATAX

Вектор, позволяющий интегрировать дополнительные пользовательские данные в шейдер процесса частиц. USERDATAX - это шесть встроенных модулей, обозначенных номером, X может быть числом от 1 до 6.

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

Velocity of the Particles node.

in float INTERPOLATE_TO_END

Значение свойства interp_to_end узла Particles.

in uint AMOUNT_RATIO

Значение свойства amount_ratio узла Particles.

Примечание

Чтобы использовать переменную COLOR в StandardMaterial3D, установите vertex_color_use_as_albedo в true. В ShaderMaterial доступ к ней осуществляется с помощью переменной COLOR.

Встроенные константы функции Start

Встроенный

Описание

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

Встроенные константы функции Process

Встроенный

Описание

in bool RESTART

true if the current process frame is first for the particle.

in bool COLLIDED

true when the particle has collided with a particle collider.

in vec3 COLLISION_NORMAL

A normal of the last collision. If there is no collision detected it is equal to vec3(0.0).

in float COLLISION_DEPTH

A length of normal of the last collision. If there is no collision detected it is equal to 0.0.

in vec3 ATTRACTOR_FORCE

A combined force of the attractors at the moment on that particle.

Process functions

emit_subparticle is currently the only custom function supported by particles shaders. It allows users to add a new particle with specified parameters from a sub-emitter. The newly created particle will only use the properties that match the flags parameter. For example, the following code will emit a particle with a specified position, velocity, and color, but unspecified rotation, scale, and custom value:

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);

Функция

Описание

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

Emits a particle from a sub-emitter.