GPUParticles3D
Наследует: GeometryInstance3D < VisualInstance3D < Node3D < Node < Object
3D-излучатель частиц.
Описание
Узел 3D-частиц, используемый для создания различных систем частиц и эффектов. GPUParticles3D содержит эмиттер, который генерирует некоторое количество частиц с заданной скоростью.
Используйте process_material, чтобы добавить ParticleProcessMaterial для настройки внешнего вида и поведения частиц. В качестве альтернативы вы можете добавить ShaderMaterial, который будет применен ко всем частицам.
Обучающие материалы
Свойства
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Методы
capture_aabb() const |
|
void |
convert_from_particles(particles: Node) |
void |
emit_particle(xform: Transform3D, velocity: Vector3, color: Color, custom: Color, flags: int) |
get_draw_pass_mesh(pass: int) const |
|
void |
request_particles_process(process_time: float) |
void |
|
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 🔗
Максимальное поддерживаемое количество проходов рисования.
Описания свойств
Количество частиц, испускаемых за один цикл испускания. Эффективная скорость испускания равна (amount * amount_ratio) / life частиц в секунду. Более высокие значения увеличат требования к графическому процессору, даже если не все частицы видны в данный момент времени или если amount_ratio уменьшено.
Примечание: Изменение этого значения приведет к перезапуску системы частиц. Чтобы избежать этого, измените 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 🔗
Диаметр основания для столкновения частиц в метрах. Если частицы кажутся тонущими в земле при столкновении, увеличьте это значение. Если частицы кажутся плавающими при столкновении, уменьшите это значение. Действует только если ParticleProcessMaterial.collision_mode равен ParticleProcessMaterial.COLLISION_RIGID или ParticleProcessMaterial.COLLISION_HIDE_ON_CONTACT.
Примечание: Частицы всегда имеют сферическую форму столкновения.
Порядок отрисовки частиц.
Примечание: DRAW_ORDER_INDEX — единственный параметр, поддерживающий векторы движения для эффектов типа TAA. Рекомендуется использовать этот порядок отрисовки, если частицы непрозрачны, чтобы исправить артефакты двоения.
Mesh, который рисуется для первого прохода рисования.
Mesh, который рисуется для второго прохода рисования.
Mesh, который рисуется для третьего прохода рисования.
Mesh, который рисуется для четвертого прохода рисования.
Количество проходов отрисовки при рендеринге частиц.
There is currently no description for this property. Please help us by contributing one!
Если true, частицы испускаются. emitting можно использовать для запуска и остановки испускания частиц. Однако, если one_shot равно true, установка emitting в true не перезапустит цикл испускания, пока все активные частицы не закончат обработку. Используйте сигнал finished, чтобы получать уведомления, как только все активные частицы закончат обработку.
Примечание: Для испускателей one_shot, из-за того, что частицы вычисляются на GPU, может быть короткий период после получения сигнала finished, в течение которого установка этого значения в true не перезапустит цикл испускания.
Совет: Если вашему испускателю one_shot необходимо немедленно возобновить испускание частиц после получения сигнала finished, рассмотрите возможность вызова restart() вместо установки emitting.
Соотношение времени между каждым выбросом. Если 0, частицы выбрасываются непрерывно. Если 1, все частицы выбрасываются одновременно.
Частота кадров системы частиц зафиксирована на значении. Например, изменение значения на 2 заставит частицы рендериться со скоростью 2 кадра в секунду. Обратите внимание, что это не замедляет симуляцию самой системы частиц.
Если true, то выполняется дробный расчет дельты, который обеспечивает более плавный эффект отображения частиц.
Заставляет все частицы в этом узле интерполироваться к концу своего жизненного цикла.
Примечание: Это работает только при использовании с ParticleProcessMaterial. Это необходимо вручную реализовать для шейдеров пользовательских процессов.
Включает интерполяцию частиц, которая делает движение частиц более плавным, когда их fixed_fps ниже частоты обновления экрана.
Количество времени, в течение которого каждая частица будет существовать (в секундах). Эффективная скорость эмиссии равна (amount * amount_ratio) / lifetime частиц в секунду.
Если true, частицы используют координатное пространство родительского узла (известное как локальные координаты). Это заставит частицы двигаться и вращаться вдоль узла GPUParticles3D (и его родителей) при его перемещении или повороте. Если false, частицы используют глобальные координаты; они не будут двигаться или вращаться вдоль узла GPUParticles3D (и его родителей) при его перемещении или повороте.
Если true, будет испущено количество частиц, равное amount.
Количество времени для предварительной обработки частиц перед началом анимации. Позволяет запустить анимацию через некоторое время после того, как частицы начали испускаться.
Примечание: Это может быть очень затратно, если установлено большое число, так как это требует запуска шейдера частиц количество раз, равное fixed_fps (или 30, если fixed_fps равен 0) для каждой секунды. В крайних случаях это может даже привести к сбою графического процессора из-за объема работы, проделанной за один кадр.
Material для обработки частиц. Может быть ParticleProcessMaterial или ShaderMaterial.
Коэффициент случайности излучения.
Устанавливает случайное семя, используемое системой частиц. Действует только если use_fixed_seed равен true.
Коэффициент масштабирования скорости. Значение 0 может использоваться для остановки частиц.
NodePath sub_emitter = NodePath("") 🔗
Путь к другому узлу GPUParticles3D, который будет использоваться как субэмиттер (см. ParticleProcessMaterial.sub_emitter_mode). Субэмиттеры можно использовать для достижения таких эффектов, как фейерверк, искры при столкновении, пузыри, лопающиеся в каплях воды, и многое другое.
Примечание: Когда задан sub_emitter, целевой узел GPUParticles3D больше не будет испускать частицы самостоятельно.
Если true, включает следы частиц с использованием системы скиннинга сетки. Разработано для работы с RibbonTrailMesh и TubeTrailMesh.
Примечание: BaseMaterial3D.use_particle_trails также должно быть включено в материале сетки частиц. В противном случае установка trail_enabled на true не даст никакого эффекта.
Примечание: В отличие от GPUParticles2D, количество секций и подразделений следа задается в свойствах RibbonTrailMesh или TubeTrailMesh.
Количество времени, которое должен представлять след частицы (в секундах). Действует только если trail_enabled равен true.
TransformAlign transform_align = 0 🔗
void set_transform_align(value: TransformAlign)
TransformAlign get_transform_align()
There is currently no description for this property. Please help us by contributing one!
Если true, частицы будут использовать одно и то же семя для каждой симуляции, используя семя, определенное в seed. Это полезно в ситуациях, когда визуальный результат должен быть согласованным между повторами, например, при использовании режима Movie Maker.
AABB visibility_aabb = AABB(-4, -4, -4, 8, 8, 8) 🔗
AABB, который определяет область узла, которая должна быть видна на экране, чтобы система частиц была активной. GeometryInstance3D.extra_cull_margin добавляется на каждую из осей AABB. Столкновения и притяжение частиц будут происходить только в этой области.
Увеличьте поле, если частицы внезапно появляются/исчезают, когда узел входит/выходит из экрана. AABB можно увеличить с помощью кода или с помощью инструмента редактора Частицы → Сгенерировать AABB.
Примечание: visible_aabb переопределяется GeometryInstance3D.custom_aabb, если это свойство установлено на значение, отличное от значения по умолчанию.
Описания метода
Возвращает выровненный по осям ограничивающий прямоугольник, содержащий все частицы, активные в текущем кадре.
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.