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.

GPUParticlesCollisionHeightField3D

Успадковує: GPUParticlesCollision3D < VisualInstance3D < Node3D < Node < Object

Тривимірна форма зіткнення частинок у формі карти висот у реальному часі, що впливає на вузли GPUParticles3D.

Опис

Тривимірна форма зіткнення частинок у формі карти висот у реальному часі, що впливає на вузли GPUParticles3D.

Форми карти висот дозволяють ефективно представляти зіткнення для опуклих і увігнутих об’єктів з єдиним «поверхом» (наприклад, рельєф). Це менш гнучкий, ніж GPUParticlesCollisionSDF3D, але не потребує етапу запікання.

GPUParticlesCollisionHeightField3D can also be regenerated in real-time when it is moved, when the camera moves, or even continuously. This makes GPUParticlesCollisionHeightField3D a good choice for weather effects such as rain and snow and games with highly dynamic geometry. However, this class is limited since heightmaps cannot represent overhangs (e.g. indoors or caves).

Примітка: ParticleProcessMaterial.collision_mode має мати значення true у матеріалі процесу GPUParticles3D, щоб зіткнення працювало.

Примітка: Зіткнення частинок впливає лише на GPUParticles3D, а не на CPUParticles3D.

Властивості

bool

follow_camera_enabled

false

int

heightfield_mask

1048575

Resolution

resolution

2

Vector3

size

Vector3(2, 2, 2)

UpdateMode

update_mode

0

Методи

bool

get_heightfield_mask_value(layer_number: int) const

void

set_heightfield_mask_value(layer_number: int, value: bool)


Переліки

enum Resolution: 🔗

Resolution RESOLUTION_256 = 0

Генерація карти висоти 256×256. Призначений для невеликих сцен, або більших сцен без віддалених частинок.

Resolution RESOLUTION_512 = 1

Генерація карти висоти 512×512. Призначений для середніх сцен, або більших сцен без віддалених частинок.

Resolution RESOLUTION_1024 = 2

Генерація карти висоти 1024×1024. Призначений для великих сцен з віддаленими частинками.

Resolution RESOLUTION_2048 = 3

Генерація карти висоти 2048 × 2048. Призначений для дуже великих сцен з віддаленими частинками.

Resolution RESOLUTION_4096 = 4

Генерувати 4096×4096 карту висоти. Призначений для величезних сцен з віддаленими частинками.

Resolution RESOLUTION_8192 = 5

Генерація карти висоти 8192×8192. Призначений для гігантських сцен з віддаленими частинками.

Resolution RESOLUTION_MAX = 6

Представляє розмір переліку Resolution.


enum UpdateMode: 🔗

UpdateMode UPDATE_MODE_WHEN_MOVED = 0

Тільки оновлення карти висоти, коли GPUParticlesCollisionHeightField3D пересувається вузол, або коли камера рухається, якщо слід_camera_enabled true. У будь-якому напрямку, або за викликом RenderingServer.article_collision_height_field_update().

UpdateMode UPDATE_MODE_ALWAYS = 1

Оновлення карти висоти кожного кадру. Це має суттєву вартість виконання. Цей оновлення слід використовувати лише при геометрії, які частинки можуть сильно взаємодіяти з змінами під час гри.


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

bool follow_camera_enabled = false 🔗

  • void set_follow_camera_enabled(value: bool)

  • bool is_follow_camera_enabled()

Якщо true, GPUParticlesCollisionHeightField3D буде слідувати за поточною камерою в глобальному просторі. Щоб це працювало, вузол GPUParticlesCollisionHeightField3D не обов'язково має бути дочірнім елементом вузла Camera3D.

Стеження за камерою має втрату продуктивності, оскільки воно змушує карту висот оновлюватись щоразу, коли камера рухається. Розгляньте можливість зниження resolution, щоб покращити продуктивність, якщо follow_camera_enabled має значення true.


int heightfield_mask = 1048575 🔗

  • void set_heightfield_mask(value: int)

  • int get_heightfield_mask()

Візуальні шари, які слід враховувати під час оновлення карти висот. Лише MeshInstance3D, чий VisualInstance3D.layers збігається з цим heightfield_mask, буде включено в оновлення зіткнень карти висот. За замовчуванням усі 20 видимих користувачем шарів враховуються для оновлення колізії карти висот.

Примітка: Оскільки heightfield_mask дозволяє зберігати загалом 32 шари, є додаткові 12 шарів, які використовуються лише внутрішньо механізмом і не відображаються в редакторі. Налаштування heightfield_mask за допомогою сценарію дозволяє перемикати ці зарезервовані шари, що може бути корисним для плагінів редактора.

Щоб легше налаштувати heightfield_mask за допомогою сценарію, використовуйте get_heightfield_mask_value() і set_heightfield_mask_value().


Resolution resolution = 2 🔗

Більшість дозволів може представляти дрібні деталі більш точно у великих сценах, за вартістю нижньої продуктивності. Якщо пам'ятати оновлення_mode є UPDATE_MODE_ALWAYS, розглянемо використання найнижчого дозволу.


Vector3 size = Vector3(2, 2, 2) 🔗

  • void set_size(value: Vector3)

  • Vector3 get_size()

Розмір карти зіткнення в 3D одиниці. Щоб поліпшити якість карти висоти, size слід встановити якомога меншою, при цьому покриття деталей сцени вам потрібно.


UpdateMode update_mode = 0 🔗

Політика оновлення для використання створеної карти висоти.


Описи методів

bool get_heightfield_mask_value(layer_number: int) const 🔗

Повертає true, якщо вказаний шар heightfield_mask увімкнено, враховуючи layer_number між 1 і 20 включно.


void set_heightfield_mask_value(layer_number: int, value: bool) 🔗

На основі value вмикає або вимикає вказаний шар у heightfield_mask, враховуючи layer_number від 1 до 20 включно.