Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

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

ParticlesTransformAlignAxis

transform_align_axis

ParticlesTransformAlignCustomSrc

transform_align_channel_filter

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, process_time_residual: float = 0.0)

void

restart(keep_seed: bool = false)

void

set_draw_pass_mesh(pass: int, mesh: Mesh)


Сигнали

finished() 🔗

Випромінюється, коли всі активні частинки закінчили обробку. Щоб негайно перезапустити цикл викидів, викличте restart().

Цей сигнал ніколи не випромінюється, коли one_shot вимкнено, оскільки частинки випромінюються та обробляються постійно.

Примітка: Для випромінювачів one_shot, через те, що частинки обчислюються графічним процесором, може бути короткий період після отримання сигналу, протягом якого налаштування 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

Do not align particle transforms relative to the camera or velocity.

TransformAlign TRANSFORM_ALIGN_Z_BILLBOARD = 1

Align each particle's Z axis to face the camera.

TransformAlign TRANSFORM_ALIGN_Y_TO_VELOCITY = 2

Align each particle's Y axis to the velocity vector.

TransformAlign TRANSFORM_ALIGN_Z_BILLBOARD_Y_TO_VELOCITY = 3

Align each particle's Z axis to face the camera and Y axis to the velocity vector.

TransformAlign TRANSFORM_ALIGN_LOCAL_BILLBOARD = 4

Align each particle's Z axis to face the camera, while preserving a given axis (X or Y).


Константи

MAX_DRAW_PASSES = 4 🔗

Підтримується максимальна кількість витяжок.


Описи властивостей

int amount = 8 🔗

  • void set_amount(value: int)

  • int get_amount()

Кількість частинок для випромінювання в одному циклі випромінювання. Ефективна швидкість емісії (amount * amount_ratio) / життя частинки на секунду. Більші значення підвищать вимоги до GPU, навіть якщо не всі частинки видимі в обумовлений час або якщо знизився кількість пам'яті.

Примітка: Зміна цього значення призведе до перезавантаження системи частинок. Щоб уникнути цього, змініть amount_ratio замість.


float amount_ratio = 1.0 🔗

  • void set_amount_ratio(value: float)

  • float get_amount_ratio()

Співвідношення частинок, які насправді повинні бути введеними. Якщо встановити значення нижче 1.0, це буде встановлено кількість вживаних частинок протягом усього життя amount * кількість_ratio. На відміну від зміни amount, зміни amount_ratio при випромінюванні не впливає вже наявні частинки і не викликає системи частинок для перезавантаження. amount_ratio може бути використана для створення ефектів, які роблять число вживаних частинок варіюватися з часом.

Примітка: Зменшення amount_ratio не має допомоги продуктивності, так як ресурси повинні бути виділені і оброблені для всього amount частинок незалежно від amount_ratio. Якщо ви не маєте намір змінити кількість частинок, які випромінюються, тоді як частинки випромінюють, переконайтеся, що кількість_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, частинки вдаються. пам'ятне випромінювання може бути використаний для запуску та припинення частинок з випромінювання. Однак, якщо one_shot є true налаштування emitting до true не перезапустити цикл викидів, якщо всі активні частинки закінчилися обробки. Використовуйте finished сигнал, який буде повідомлено один раз, коли всі активні обробки частинок.

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

Підказка: Якщо ваш one_shot випромінювач повинен негайно перезапустити частинки після отримання сигналу, розгляньте виклик 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) / термін служби`` частинки на секунду.


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) за кожну секунду. У крайніх випадках це може навіть призвести до збою GPU через обсяг роботи, виконаної в одному кадрі.


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

  • void set_sub_emitter(value: NodePath)

  • NodePath get_sub_emitter()

Шлях до іншої 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.

Note: BaseMaterial3D.use_particle_trails також повинен бути включений на матеріалі сітки. В іншому випадку налаштування trail_enabled до true не буде ефектно.

Note: На відміну від GPUParticles2D, кількість розділів причепів і підрозділів встановлюється в RibbonTrailMesh або TubeTrailMesh властивості.


float trail_lifetime = 0.3 🔗

  • void set_trail_lifetime(value: float)

  • float get_trail_lifetime()

Кількість часу слід представляти частинку (в секундах). true.


TransformAlign transform_align = 0 🔗

The alignment of particles. Use this for billboarding and aligning to velocity.


ParticlesTransformAlignAxis transform_align_axis 🔗

  • void set_transform_align_axis(value: ParticlesTransformAlignAxis)

  • ParticlesTransformAlignAxis get_transform_align_axis()

When using transform align local billboard, which axis to use for the billboarding. Supports only X or Y.


ParticlesTransformAlignCustomSrc transform_align_channel_filter 🔗

  • void set_transform_align_channel_filter(value: ParticlesTransformAlignCustomSrc)

  • ParticlesTransformAlignCustomSrc get_transform_align_channel_filter()

In the case of billboarded particles, which custom channel to read from to calculate their angle.


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 може бути вирощений за допомогою коду або з Пачастини → Generate AABB.

Примітка: visibility_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, lifetime).

Примітка: emit_particle() підтримується лише методами візуалізації Forward+ і Mobile, а не Compatibility.


Mesh get_draw_pass_mesh(pass: int) const 🔗

Повертає Mesh, що намальований за індексом pass.


void request_particles_process(process_time: float, process_time_residual: float = 0.0) 🔗

Requests the particles to process for extra process time during a single frame.

process_time defines the time that the particles will process while emitting is on. process_time_residual defines the time that particles will process with emitting turned off for the simulation. When combined with speed_scale set to 0.0, this is useful to be able to seek a particle system timeline.


void restart(keep_seed: bool = false) 🔗

Перезапускає цикл викиду частинок, очищаючи існуючі частинки. Щоб уникнути зникнення частинок із вікна перегляду, дочекайтеся сигналу finished перед викликом.

Примітка: Сигнал finished випромінюють лише випромінювачі one_shot.

Якщо keep_seed має значення true, поточне випадкове початкове число буде збережено. Корисно для пошуку та відтворення.


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

Встановлює Mesh, що мальований в індексі pass.