GPUParticles3D

Наследует: GeometryInstance3D < VisualInstance3D < Node3D < Node < Object

3D-излучатель частиц.

Описание

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

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

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

Свойства

int

amount

8

float

amount_ratio

1.0

float

collision_base_size

0.01

DrawOrder

draw_order

0

Mesh

draw_pass_1

Mesh

draw_pass_2

Mesh

draw_pass_3

Mesh

draw_pass_4

int

draw_passes

1

Skin

draw_skin

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("")

bool

trail_enabled

false

float

trail_lifetime

0.3

TransformAlign

transform_align

0

bool

use_fixed_seed

false

AABB

visibility_aabb

AABB(-4, -4, -4, 8, 8, 8)

Методы

AABB

capture_aabb() const

void

convert_from_particles(particles: Node)

void

emit_particle(xform: Transform3D, velocity: Vector3, color: Color, custom: Color, flags: int)

Mesh

get_draw_pass_mesh(pass: int) const

void

request_particles_process(process_time: float)

void

restart(keep_seed: bool = false)

void

set_draw_pass_mesh(pass: int, mesh: Mesh)


Сигналы

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

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

DrawOrder DRAW_ORDER_VIEW_DEPTH = 3

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


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.


enum TransformAlign: 🔗

TransformAlign TRANSFORM_ALIGN_DISABLED = 0

There is currently no description for this enum. Please help us by contributing one!

TransformAlign TRANSFORM_ALIGN_Z_BILLBOARD = 1

There is currently no description for this enum. Please help us by contributing one!

TransformAlign TRANSFORM_ALIGN_Y_TO_VELOCITY = 2

There is currently no description for this enum. Please help us by contributing one!

TransformAlign TRANSFORM_ALIGN_Z_BILLBOARD_Y_TO_VELOCITY = 3

There is currently no description for this enum. Please help us by contributing one!


Константы

MAX_DRAW_PASSES = 4 🔗

Максимальное поддерживаемое количество проходов рисования.


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

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 = 0.01 🔗

  • void set_collision_base_size(value: float)

  • float get_collision_base_size()

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

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


DrawOrder draw_order = 0 🔗

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

Примечание: DRAW_ORDER_INDEX — единственный параметр, поддерживающий векторы движения для эффектов типа TAA. Рекомендуется использовать этот порядок отрисовки, если частицы непрозрачны, чтобы исправить артефакты двоения.


Mesh draw_pass_1 🔗

  • void set_draw_pass_mesh(pass: int, mesh: Mesh)

  • Mesh get_draw_pass_mesh(pass: int) const

Mesh, который рисуется для первого прохода рисования.


Mesh draw_pass_2 🔗

  • void set_draw_pass_mesh(pass: int, mesh: Mesh)

  • Mesh get_draw_pass_mesh(pass: int) const

Mesh, который рисуется для второго прохода рисования.


Mesh draw_pass_3 🔗

  • void set_draw_pass_mesh(pass: int, mesh: Mesh)

  • Mesh get_draw_pass_mesh(pass: int) const

Mesh, который рисуется для третьего прохода рисования.


Mesh draw_pass_4 🔗

  • void set_draw_pass_mesh(pass: int, mesh: Mesh)

  • Mesh get_draw_pass_mesh(pass: int) const

Mesh, который рисуется для четвертого прохода рисования.


int draw_passes = 1 🔗

  • void set_draw_passes(value: int)

  • int get_draw_passes()

Количество проходов отрисовки при рендеринге частиц.


Skin draw_skin 🔗

  • void set_skin(value: Skin)

  • Skin get_skin()

There is currently no description for this property. Please help us by contributing one!


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, частицы выбрасываются непрерывно. Если 1, все частицы выбрасываются одновременно.


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, частицы используют координатное пространство родительского узла (известное как локальные координаты). Это заставит частицы двигаться и вращаться вдоль узла GPUParticles3D (и его родителей) при его перемещении или повороте. Если false, частицы используют глобальные координаты; они не будут двигаться или вращаться вдоль узла GPUParticles3D (и его родителей) при его перемещении или повороте.


bool one_shot = false 🔗

  • void set_one_shot(value: bool)

  • bool get_one_shot()

Если true, будет испущено количество частиц, равное amount.


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("") 🔗

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

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


bool trail_enabled = false 🔗

  • void set_trail_enabled(value: bool)

  • bool is_trail_enabled()

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

Примечание: BaseMaterial3D.use_particle_trails также должно быть включено в материале сетки частиц. В противном случае установка trail_enabled на true не даст никакого эффекта.

Примечание: В отличие от GPUParticles2D, количество секций и подразделений следа задается в свойствах RibbonTrailMesh или TubeTrailMesh.


float trail_lifetime = 0.3 🔗

  • void set_trail_lifetime(value: float)

  • float get_trail_lifetime()

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


TransformAlign transform_align = 0 🔗

There is currently no description for this property. Please help us by contributing one!


bool use_fixed_seed = false 🔗

  • void set_use_fixed_seed(value: bool)

  • bool get_use_fixed_seed()

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


AABB visibility_aabb = AABB(-4, -4, -4, 8, 8, 8) 🔗

  • void set_visibility_aabb(value: AABB)

  • AABB get_visibility_aabb()

AABB, который определяет область узла, которая должна быть видна на экране, чтобы система частиц была активной. GeometryInstance3D.extra_cull_margin добавляется на каждую из осей AABB. Столкновения и притяжение частиц будут происходить только в этой области.

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

Примечание: visible_aabb переопределяется GeometryInstance3D.custom_aabb, если это свойство установлено на значение, отличное от значения по умолчанию.


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

AABB capture_aabb() const 🔗

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


void convert_from_particles(particles: Node) 🔗

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


void emit_particle(xform: Transform3D, velocity: Vector3, color: Color, custom: Color, flags: int) 🔗

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

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

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


Mesh get_draw_pass_mesh(pass: int) const 🔗

Возвращает Mesh, который нарисован по индексу pass.


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, текущее случайное начальное число будет сохранено. Полезно для поиска и воспроизведения.


void set_draw_pass_mesh(pass: int, mesh: Mesh) 🔗

Устанавливает Mesh, который рисуется по индексу pass.