reckfellENGINE

Столкновения GPU-частиц

Материал, отдельные коллайдеры, размеры, маски и границы возможностей.

На этой странице

Столкновения GPU-частиц работают в отдельном пути рендеринга/симуляции. Обычные StaticBody3D и CollisionShape3D не превращаются в GPU-коллайдер автоматически. Если стена должна останавливать игрока и GPU-частицы, подготовьте и поддерживайте соответствующее представление для каждой системы.

Подключите все три части

  1. Назначьте источнику ParticleProcessMaterial и выберите Collision → Mode → Rigid либо Hide On Contact. Disabled отключает реакцию, даже если Entity коллайдера существует.
  2. Подберите CollisionBaseSize источника под эффект. Это не масштаб меша и не VisibilityAabb. CollisionUseScale задаёт участие масштаба частицы в столкновении.
  3. Добавьте GPUParticlesCollisionBox3D или другой подходящий коллайдер частиц в тот же эффективный World3D, что и источник.
  4. Обеспечьте пересечение CullMask коллайдера с render Layers источника. Это не физические слои/маски игрового мира. Сам источник также должен быть виден камере.
  5. Проверьте понятную траекторию о достаточно толстое препятствие до добавления сложных материалов, турбулентности и высокой скорости.

В C# GpuParticlesCollisionBox3D.Size задаёт полные локальные размеры, не половинные extents. Size (4, 0.2, 4) даёт такой размер при единичном масштабе трансформации. Старые примеры с Extents не следует переносить в текущий SDK.

Создайте пол для частиц

Класс содержит независимые конструкторы пола и притягивателя; этот раздел использует только CreateFloor.

C#
using Reckfell;

public static class ParticleForces
{
    // GPU-particle collision only; no visible geometry or gameplay collider.
    public static GpuParticlesCollisionBox3D CreateFloor()
    {
        return new GpuParticlesCollisionBox3D
        {
            Size = new Vector3(4f, 0.2f, 4f), // Full dimensions, not half extents.
            Position = new Vector3(0, -0.5f, 0),
            CullMask = 1,
        };
    }

    public static GpuParticlesAttractorSphere3D CreatePull()
    {
        return new GpuParticlesAttractorSphere3D
        {
            Position = Vector3.Right,
            Radius = 3f,
            Strength = 8f,
            Attenuation = 1f,
            Directionality = 0f,
            CullMask = 1,
        };
    }
}

Вызовите var floor = ParticleForces.CreateFloor(); и добавьте его в тот же мир, что и источник. Для исходной проверки используйте Layers 1 источника, CollisionMode Rigid в ParticleProcessMaterial, гравитацию вниз и ненулевой CollisionBaseSize. Класс не создаёт видимый меш пола и игровой коллайдер: при необходимости добавьте их отдельно.

Нативная проверка подтверждает остановку падающего эффекта боксом при совпадающей маске. Несовпадение маски или Disabled пропускает его сквозь препятствие. HideOnContact убирает видимые частицы при контакте. Замена бокса частиц только обычным StaticBody не создаёт GPU-реакцию.

Выберите представление

Коллайдер частицНазначениеОграничение
Box / sphereПростые аналитические препятствия; Size бокса или Radius сферы.Приближение геометрии. Не считайте произвольный неравномерный масштаб заранее проверенным.
Height fieldЗахват ближайших поверхностей мешей в карту высот.Не полноценное произвольное 3D-тело со всеми навесами/туннелями; важны разрешение и обновление.
SDFСгенерированная 3D-текстура расстояний для сложной геометрии.Нужны корректные данные и поддерживаемый рендеринг; изменение сцены не перезапекает поле автоматически.

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

Не путайте маски

  • CullMask коллайдера частиц выбирает источники по их render Layers.
  • HeightfieldMask выбирает слои мешей для построения карты высот. Не заменяет CullMask выбора источников.
  • BakeMask SDF выбирает геометрию процесса запекания. После изменения выбора или геометрии перепроверьте/перезапеките данные.
  • Игровые CollisionLayer/CollisionMask и CullMask камеры решают другие задачи. Одинаковые номера битов системы не соединяют.

Для height field WhenMoved относится к перемещению самого компонента: движение меша-источника не гарантирует обновление в этом режиме. Always обновляет дороже. FollowCameraEnabled перемещает область захвата шагами и может запрашивать обновление при таком сдвиге; не предполагайте полную перегенерацию от каждого малого движения камеры.

Для SDF проверьте Size, разрешение, сгенерированную Texture и выбор источников. Грубое поле пропускает тонкие детали. Трансформация или замена ресурса отличается от перезапекания изменённой геометрии уровня.

Учитывайте качество быстрых столкновений

Тонкие препятствия и быстрые частицы могут проскакивать при недостаточной частоте симуляции или неподходящем размере столкновения. Увеличивайте точность, толщину коллайдера или размер частицы после определения причины. FixedFps меняет шаг симуляции частиц, не FPS всей игры; интерполяция не добавляет шаги столкновений.

Bounce и friction материала задают реакцию, но не создают полноценную симуляцию rigid body для каждой частицы. Не ожидайте обычные сигналы контактов физических тел, принадлежность игрового попадания и CPU-результат для каждого GPU-контакта. Если это нужно геймплею, предусмотрите отдельный дизайн столкновений.

Найдите причину неверного контакта

СимптомЧто проверить
Частицы проходят сквозь всёCollisionMode и реальный GPU-коллайдер, не только игровое тело.
Один эффект сталкивается, другой нетRender Layers, CullMask коллайдера и материал каждого эффекта.
Частицы останавливаются далеко от поверхностиТрансформацию/Size, базовый размер столкновения и точность SDF/height field.
Движущаяся геометрия игнорируетсяРежим обновления поля или устаревшее запекание.
Тонкие детали пропускаютсяРазрешение поля, шаг симуляции и размер столкновения.
Эффект исчезает при касанииВозможно, намеренно выбран HideOnContact.

Исполненный пример — Windows Forward+/Vulkan, аналитический бокс, контролируемые маски/режимы и отрицательная проверка обычного игрового тела. Запекание SDF/height field, движущиеся/масштабированные коллайдеры, пределы проскока, все рендереры/платформы, экспорт и бюджеты производительности здесь не объявлены проверенными. Силы без контакта разобраны в статье Притягиватели.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.