Шейдеры частиц (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 |
Отключить силу притяжения. |
disаble_velocity |
Игнорировать значение |
collision_use_scale |
Масштабирует размер частицы для столкновений. |
Встроенные функции
Значения, отмеченные как in, доступны только для чтения. Значения, отмеченные как out, могут быть записаны и не обязательно содержат осмысленные значения. Значения, отмеченные как inout, предоставляют осмысленное значение по умолчанию и могут быть записаны. Сэмплеры не могут быть записаны, поэтому они не отмечены.
Глобальные встроенные функции
Глобальные встроенные модули доступны везде, включая пользовательские функции.
Встроенный |
Описание |
|---|---|
в плавающем TIME |
Глобальное время с момента запуска движка, в секундах. Оно повторяется каждые |
в float PI |
Константа |
в float TAU |
Константа |
В float E |
Константа |
Встроенные 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 |
|
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.
Встроенные константы функции Start
Встроенный |
Описание |
|---|---|
in bool RESTART_POSITION |
|
in bool RESTART_ROT_SCALE |
|
in bool RESTART_VELOCITY |
|
in bool RESTART_COLOR |
|
in bool RESTART_CUSTOM |
|
Встроенные константы функции Process
Встроенный |
Описание |
|---|---|
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);
Функция |
Описание |
|---|---|
bool emit_subparticle (mat4 xform, vec3 velocity, vec4 color, vec4 custom, uint flags) |
Испускает частицу из sub-emitter. |