GPUParticlesCollisionHeightField3D

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

Трехмерная форма столкновения частиц в реальном времени, имеющая форму карты высот, влияющая на узлы GPUParticles3D.

Описание

Форма столкновения 3D-частиц в реальном времени в форме карты высот, влияющая на узлы GPUParticles3D.

Формы карты высот позволяют эффективно представлять столкновения для выпуклых и вогнутых объектов с одним «полом» (например, ландшафтом). Это менее гибко, чем GPUParticlesCollisionSDF3D, но не требует этапа запекания.

GPUParticlesCollisionHeightField3D также может быть регенерировано в реальном времени при перемещении, при перемещении камеры или даже непрерывно. Это делает GPUParticlesCollisionHeightField3D хорошим выбором для погодных эффектов, таких как дождь и снег, и игр с высокодинамичной геометрией. Однако этот класс ограничен, поскольку карты высот не могут отображать выступы (например, в помещениях или пещерах).

Примечание: 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 или при перемещении камеры, если follow_camera_enabled имеет значение true. Обновление можно принудительно выполнить, слегка переместив GPUParticlesCollisionHeightField3D в любом направлении или вызвав RenderingServer.particles_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 🔗

Более высокие разрешения могут точнее отображать мелкие детали в больших сценах, за счет снижения производительности. Если update_mode — это UPDATE_MODE_ALWAYS, рассмотрите возможность использования самого низкого возможного разрешения.


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

Размер карты высот столкновения в 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 включительно.