GPUParticles2D

Наследует: Node2D < CanvasItem < Node < Object

Двумерный излучатель частиц.

Описание

Узел 2D-частиц, используемый для создания различных систем частиц и эффектов. GPUParticles2D содержит излучатель, который генерирует некоторое количество частиц с заданной скоростью.

Используйте свойство process_material, чтобы добавить ParticleProcessMaterial для настройки внешнего вида и поведения частиц. В качестве альтернативы вы можете добавить ShaderMaterial, который будет применен ко всем частицам.

2D-частицы могут опционально сталкиваться с узлами LightOccluder2D, но они не сталкиваются с узлами PhysicsBody2D.

Обучающие материалы

Свойства

int

amount

8

float

amount_ratio

1.0

float

collision_base_size

1.0

DrawOrder

draw_order

1

bool

emitting

true

float

explosiveness

0.0

int

fixed_fps

30

bool

fract_delta

true

float

interp_to_end

0.0

bool

interpolate

true

float

lifetime

1.0

bool

local_coords

false

bool

one_shot

false

float

preprocess

0.0

Material

process_material

float

randomness

0.0

int

seed

0

float

speed_scale

1.0

NodePath

sub_emitter

NodePath("")

Texture2D

texture

bool

trail_enabled

false

float

trail_lifetime

0.3

int

trail_section_subdivisions

4

int

trail_sections

8

bool

use_fixed_seed

false

Rect2

visibility_rect

Rect2(-100, -100, 200, 200)

Методы

Rect2

capture_rect() const

void

convert_from_particles(particles: Node)

void

emit_particle(xform: Transform2D, velocity: Vector2, color: Color, custom: Color, flags: int)

void

request_particles_process(process_time: float)

void

restart(keep_seed: bool = false)


Сигналы

finished() 🔗

Вызывается, когда все активные частицы завершили обработку. Чтобы немедленно перезапустить цикл испускания, вызовите restart().

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

Примечание: Для эмиттеров one_shot, поскольку частицы вычисляются на GPU, может быть короткий период после получения сигнала, в течение которого установка emitting на true не перезапустит цикл испускания. Эта задержка устраняется путем вызова restart().


Перечисления

enum DrawOrder: 🔗

DrawOrder DRAW_ORDER_INDEX = 0

Частицы рисуются в порядке испускания.

DrawOrder DRAW_ORDER_LIFETIME = 1

Частицы рисуются в порядке оставшегося времени жизни. Другими словами, частица с наибольшим временем жизни рисуется спереди.

DrawOrder DRAW_ORDER_REVERSE_LIFETIME = 2

Частицы рисуются в обратном порядке оставшегося времени жизни. Другими словами, частица с наименьшим временем жизни рисуется спереди.


enum EmitFlags: 🔗

EmitFlags EMIT_FLAG_POSITION = 1

Частица стартует в указанной позиции.

EmitFlags EMIT_FLAG_ROTATION_SCALE = 2

Частица начинается с указанного поворота и масштаба.

EmitFlags EMIT_FLAG_VELOCITY = 4

Частица стартует с заданным вектором скорости, который определяет направление и скорость излучения.

EmitFlags EMIT_FLAG_COLOR = 8

Частица начинается с указанного цвета.

EmitFlags EMIT_FLAG_CUSTOM = 16

Частица начинается с указанных данных CUSTOM.


Описания свойств

int amount = 8 🔗

  • void set_amount(value: int)

  • int get_amount()

Количество частиц, испускаемых за один цикл испускания. Эффективная скорость испускания равна (amount * amount_ratio) / life частиц в секунду. Более высокие значения увеличат требования к графическому процессору, даже если не все частицы видны в данный момент времени или если amount_ratio уменьшено.

Примечание: Изменение этого значения приведет к перезапуску системы частиц. Чтобы избежать этого, измените amount_ratio.


float amount_ratio = 1.0 🔗

  • void set_amount_ratio(value: float)

  • float get_amount_ratio()

Соотношение частиц, которые должны быть фактически испущены. Если установлено значение ниже 1.0, это установит количество испускаемых частиц за время жизни на amount * amount_ratio. В отличие от изменения amount, изменение amount_ratio во время испускания не влияет на уже испущенные частицы и не приводит к перезапуску системы частиц. amount_ratio можно использовать для создания эффектов, которые заставляют количество испускаемых частиц меняться со временем.

Примечание: Уменьшение amount_ratio не дает выигрыша в производительности, поскольку ресурсы должны быть выделены и обработаны для общего amount частиц независимо от amount_ratio. Если вы не собираетесь изменять количество испускаемых частиц во время испускания частиц, убедитесь, что amount_ratio установлено на 1 и вместо этого измените amount по своему усмотрению.


float collision_base_size = 1.0 🔗

  • void set_collision_base_size(value: float)

  • float get_collision_base_size()

Множитель радиуса столкновения частиц. 1.0 соответствует размеру спрайта. Если частицы кажутся тонущими в земле при столкновении, увеличьте это значение. Если частицы кажутся плавающими при столкновении, уменьшите это значение. Действует только если ParticleProcessMaterial.collision_mode равен ParticleProcessMaterial.COLLISION_RIGID или ParticleProcessMaterial.COLLISION_HIDE_ON_CONTACT.

Примечание: Частицы всегда имеют сферическую форму столкновения.


DrawOrder draw_order = 1 🔗

Порядок отрисовки частиц.


bool emitting = true 🔗

  • void set_emitting(value: bool)

  • bool is_emitting()

Если true, частицы испускаются. emitting можно использовать для запуска и остановки испускания частиц. Однако, если one_shot равно true, установка emitting в true не перезапустит цикл испускания, пока все активные частицы не закончат обработку. Используйте сигнал finished, чтобы получать уведомления, как только все активные частицы закончат обработку.

Примечание: Для испускателей one_shot, из-за того, что частицы вычисляются на GPU, может быть короткий период после получения сигнала finished, в течение которого установка этого значения в true не перезапустит цикл испускания.

Совет: Если вашему испускателю one_shot необходимо немедленно возобновить испускание частиц после получения сигнала finished, рассмотрите возможность вызова restart() вместо установки emitting.


float explosiveness = 0.0 🔗

  • void set_explosiveness_ratio(value: float)

  • float get_explosiveness_ratio()

Насколько быстро выбрасываются частицы в цикле эмиссии. Если больше 0, то будет разрыв в эмиссии до начала следующего цикла.


int fixed_fps = 30 🔗

  • void set_fixed_fps(value: int)

  • int get_fixed_fps()

Частота кадров системы частиц зафиксирована на значении. Например, изменение значения на 2 заставит частицы рендериться со скоростью 2 кадра в секунду. Обратите внимание, что это не замедляет симуляцию самой системы частиц.


bool fract_delta = true 🔗

  • void set_fractional_delta(value: bool)

  • bool get_fractional_delta()

Если true, то выполняется дробный расчет дельты, который обеспечивает более плавный эффект отображения частиц.


float interp_to_end = 0.0 🔗

  • void set_interp_to_end(value: float)

  • float get_interp_to_end()

Заставляет все частицы в этом узле интерполироваться к концу своего жизненного цикла.

Примечание: Это работает только при использовании с ParticleProcessMaterial. Это необходимо вручную реализовать для шейдеров пользовательских процессов.


bool interpolate = true 🔗

  • void set_interpolate(value: bool)

  • bool get_interpolate()

Включает интерполяцию частиц, которая делает движение частиц более плавным, когда их fixed_fps ниже частоты обновления экрана.


float lifetime = 1.0 🔗

  • void set_lifetime(value: float)

  • float get_lifetime()

Количество времени, в течение которого каждая частица будет существовать (в секундах). Эффективная скорость эмиссии равна (amount * amount_ratio) / lifetime частиц в секунду.


bool local_coords = false 🔗

  • void set_use_local_coordinates(value: bool)

  • bool get_use_local_coordinates()

Если true, частицы используют координатное пространство родительского узла (известное как локальные координаты). Это заставит частицы двигаться и вращаться вдоль узла GPUParticles2D (и его родителей) при его перемещении или повороте. Если false, частицы используют глобальные координаты; они не будут двигаться или вращаться вдоль узла GPUParticles2D (и его родителей) при его перемещении или повороте.


bool one_shot = false 🔗

  • void set_one_shot(value: bool)

  • bool get_one_shot()

Если true, происходит только один цикл эмиссии. Если установить true во время цикла, эмиссия прекратится в конце цикла.


float preprocess = 0.0 🔗

  • void set_pre_process_time(value: float)

  • float get_pre_process_time()

Система частиц запускается так, как будто она уже работала столько секунд.

Примечание: Это может быть очень затратно, если установлено большое число, так как это требует запуска шейдера частиц количество раз, равное fixed_fps (или 30, если fixed_fps равен 0) для каждой секунды. В крайних случаях это может даже привести к сбою графического процессора из-за объема работы, выполненной за один кадр.


Material process_material 🔗

Material для обработки частиц. Может быть ParticleProcessMaterial или ShaderMaterial.


float randomness = 0.0 🔗

  • void set_randomness_ratio(value: float)

  • float get_randomness_ratio()

Коэффициент случайности времени жизни излучения.


int seed = 0 🔗

  • void set_seed(value: int)

  • int get_seed()

Устанавливает случайное семя, используемое системой частиц. Действует только если use_fixed_seed равен true.


float speed_scale = 1.0 🔗

  • void set_speed_scale(value: float)

  • float get_speed_scale()

Коэффициент масштабирования скорости работы системы частиц. Значение 0 может использоваться для остановки частиц.


NodePath sub_emitter = NodePath("") 🔗

Путь к другому узлу GPUParticles2D, который будет использоваться как субэмиттер (см. ParticleProcessMaterial.sub_emitter_mode). Субэмиттеры можно использовать для достижения таких эффектов, как фейерверк, искры при столкновении, пузыри, лопающиеся в каплях воды, и многое другое.

Примечание: Когда задан sub_emitter, целевой узел GPUParticles2D больше не будет испускать частицы самостоятельно.


Texture2D texture 🔗

Текстура частиц. Если null, частицы будут квадратами размером 1×1 пиксель.

Примечание: Чтобы использовать текстуру флипбука/атласа спрайтов, назначьте новый CanvasItemMaterial свойству CanvasItem.material GPUParticles2D, затем включите CanvasItemMaterial.particles_animation и установите CanvasItemMaterial.particles_anim_h_frames, CanvasItemMaterial.particles_anim_v_frames и CanvasItemMaterial.particles_anim_loop для соответствия текстуре флипбука/атласа спрайтов.


bool trail_enabled = false 🔗

  • void set_trail_enabled(value: bool)

  • bool is_trail_enabled()

Если true, включает следы частиц с использованием системы скиннинга сетки.

Примечание: В отличие от GPUParticles3D, количество секций и подразделений следа задается свойствами trail_sections и trail_section_subdivisions.


float trail_lifetime = 0.3 🔗

  • void set_trail_lifetime(value: float)

  • float get_trail_lifetime()

Количество времени, которое должен представлять след частицы (в секундах). Действует только если trail_enabled равен true.


int trail_section_subdivisions = 4 🔗

  • void set_trail_section_subdivisions(value: int)

  • int get_trail_section_subdivisions()

Количество подразделений, используемых для рендеринга следа частиц. Более высокие значения могут привести к более плавным кривым следа за счет производительности из-за повышенной сложности сетки. См. также trail_sections. Действует только если trail_enabled имеет значение true.


int trail_sections = 8 🔗

  • void set_trail_sections(value: int)

  • int get_trail_sections()

Количество секций, используемых для рендеринга следа частиц. Более высокие значения могут привести к более плавным кривым следа за счет производительности из-за повышенной сложности сетки. См. также trail_section_subdivisions. Действует только если trail_enabled имеет значение true.


bool use_fixed_seed = false 🔗

  • void set_use_fixed_seed(value: bool)

  • bool get_use_fixed_seed()

Если true, частицы будут использовать одно и то же семя для каждой симуляции, используя семя, определенное в seed. Это полезно в ситуациях, когда визуальный результат должен быть согласованным между повторами, например, при использовании режима Movie Maker.


Rect2 visibility_rect = Rect2(-100, -100, 200, 200) 🔗

  • void set_visibility_rect(value: Rect2)

  • Rect2 get_visibility_rect()

Rect2, который определяет область узла, которая должна быть видна на экране, чтобы система частиц была активной.

Увеличьте прямоугольник, если частицы внезапно появляются/исчезают, когда узел входит/выходит из экрана. Rect2 можно увеличить с помощью кода или с помощью инструмента редактора Particles → Generate Visibility Rect.


Описания метода

Rect2 capture_rect() const 🔗

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

Примечание: При использовании потокового рендеринга этот метод синхронизирует поток рендеринга. Частый его вызов может негативно сказаться на производительности.


void convert_from_particles(particles: Node) 🔗

Устанавливает свойства этого узла в соответствии с заданным узлом CPUParticles2D.


void emit_particle(xform: Transform2D, velocity: Vector2, color: Color, custom: Color, flags: int) 🔗

Выпускает одну частицу. Применяются ли xform, velocity, color и custom, зависит от значения flags. См. EmitFlags.

ParticleProcessMaterial по умолчанию перезапишет color и будет использовать содержимое custom как (rotation, age, animation, life).

Примечание: emit_particle() поддерживается только в методах рендеринга Forward+ и Mobile, но не Compatibility.


void request_particles_process(process_time: float) 🔗

Запрашивает обработку частиц для дополнительного времени процесса в течение одного кадра.

Полезно для воспроизведения частиц, если используется в сочетании с use_fixed_seed или путем вызова restart() с параметром keep_seed, установленным на true.


void restart(keep_seed: bool = false) 🔗

Перезапускает цикл испускания частиц, очищая существующие частицы. Чтобы избежать исчезновения частиц из области просмотра, дождитесь сигнала finished перед вызовом.

Примечание: Сигнал finished испускается только эмиттерами one_shot.

Если keep_seed равен true, текущее случайное начальное число будет сохранено. Полезно для поиска и воспроизведения.