reckfellENGINE

Источник частиц: время, вместимость и видимость

Эмиссия, OneShot, пауза, границы, координаты и стоимость отрисовки.

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

Сначала определите задачу: изменить вместимость системы, моменты рождения частиц, ход симуляции или отображение геометрии. Время источника настраивается отдельно от сил ParticleProcessMaterial и материала поверхности меша.

Вместимость и эмиссия

СвойствоСмыслПрактическое следствие
AmountВместимость системы, не менее 1.Изменение перевыделяет данные частиц в текущей реализации RenderingDevice. Не анимируйте его как дешёвый регулятор плотности.
AmountRatioДоля рождения от этой вместимости; используйте 0–1.Меняет участие в рождении, не уменьшая выделенную вместимость Amount. Это не команда стереть все живые частицы.
EmittingИспускаются ли новые частицы.False не равно пустому изображению и не равно паузе симуляции.
LifetimeВремя жизни/цикла в секундах, положительное.Влияет на расписание рождения и длительность существования частиц.

Для обычной непрерывной эмиссии с полным ratio, равномерным временем и SpeedScale 1 отношение Amount / Lifetime даёт полезную номинальную оценку частиц в секунду. Всплеск, изменённый ratio, случайные интервалы, собственный шейдер и другой масштаб времени меняют её смысл. Не считайте это точным числом частиц на экране.

Время всплеска и завершение

  • OneShot выполняет один цикл вместо повторения. Подходит для попаданий и подбора предметов; при необходимости подключайте Finished до запуска.
  • Explosiveness = 0 распределяет рождения по циклу; 1 собирает их в начале. Промежуточные значения сжимают интервал рождения.
  • Randomness меняет моменты эмиссии. Это не тот же параметр, что случайность скорости/масштаба в ParticleProcessMaterial.
  • Restart() явно начинает новый цикл и очищает старое состояние. Он может намеренно прервать эффект; ожидание Finished — решение для жизненного цикла/пула, а не обязательное условие каждого повторного запуска.

Нативная Entity отслеживает активный интервал one-shot по Lifetime и Explosiveness. Это не делает Emitting точным запросом «все частицы мертвы». В проверенном взрывном эффекте эмиссия уже выключена, пока частицы видны. Непрерывный эффект после ручной остановки исчезает без one-shot-уведомления Finished.

Повторное Emitting true во время активного one-shot может отменить уведомление о завершении этого цикла. Для явного повторения используйте Restart. UseFixedSeed и Seed помогают повторять настройку; keepSeed у Restart сохраняет текущее зерно. Побитовая детерминированность между устройствами не обещается.

Ограничение времени в 1.0.0: после длительной паузы SpeedScale = 0 и возврата к 1 проверенный one-shot может выдать Finished, пока GPU-частицы ещё видны. Таймер Entity умножает накопленное время на текущий масштаб скорости; это не GPU-подтверждение истечения жизни. Не возвращайте эффект с меняющимся временем в пул только по этому сигналу. Фиксированная скорость простого one-shot исключает именно этот случай паузы/возобновления; при изменении времени отдельно проверьте политику жизненного цикла.

Время симуляции — не FPS рендеринга

ПараметрНазначениеОграничение
SpeedScaleМасштаб хода симуляции; ноль приостанавливает обычное продвижение.Живые частицы могут отображаться. Движение камеры и локального источника меняет картинку.
PreprocessПродвинуть начальную симуляцию, чтобы непрерывный эффект появился уже заполненным.Дополнительная работа может дать скачок времени загрузки; это не бесплатный готовый кадр.
FixedFpsЧастота шагов симуляции.Не ограничивает FPS всей игры и не заменяет SpeedScale.
InterpolateСгладить отображение между фиксированными шагами.Не добавляет шаги столкновений и не гарантирует корректность быстрых коллизий.
FractDeltaУчесть дробный момент рождения внутри шага.Не заменяет достаточную частоту симуляции эффекта.
InterpToEndСместить состояние частиц к концу их жизни.Отличается от случайности расписания и интерполяции фиксированного шага.

Пример ParticleBurst из создания эффекта подтверждает SpeedScale 0 стабильными пикселями. Остальные параметры шага/предварительной симуляции здесь сверены по исходникам; бенчмарк и визуальное сравнение каждой комбинации не заявлены.

Граница видимости не является столкновением частиц

VisibilityAabb — граница отсечения всего источника. Если она вне кадра, эффект может исчезнуть целиком, хотя отдельные симулируемые частицы находились бы на экране. Коробка не обрезает каждую частицу отдельно и не создаёт столкновения со своими стенками.

Охватите всю ожидаемую траекторию и размер отображаемого меша, включая движение источника, гравитацию и длину шлейфов. CaptureAabb сообщает текущие активные границы: это полезное наблюдение работающего эффекта, не доказательство для всех будущих кадров. Перепроверяйте после изменения скорости, времени жизни и формы рождения. Избыточная граница ухудшает отсечение.

LocalCoords определяет, следуют ли позиции частиц трансформации источника или находятся в мировом пространстве. Выберите режим до подбора границ: визуально похожему движению может понадобиться другой охват.

Отображение и стоимость

DrawPass1–4 выбирают меши отображения частиц, а не материал симуляции. Дополнительные проходы и подробные меши увеличивают работу рисования. Большие полупрозрачные карточки могут стоить дорого из-за overdraw даже при небольшом Amount. Общий ParticleProcessMaterial означает общие настройки: создайте или дублируйте ресурс для независимых параметров эффектов.

Для вырезанной формы и полупрозрачного дыма настройте прозрачность, текстуру и цвет вершин материала поверхности. Сортировка частиц помогает в отдельных наложениях, но не делает прозрачность всех эффектов и поверхностей независимой от порядка. См. Ограничения графики.

CollisionBaseSize задаёт размер для столкновений частиц, не масштаб меша и не VisibilityAabb. Для столкновений нужна собственная настройка: наличие рядом обычного игрового физического тела не доказывает поддержку. SubEmitter не означает «создать дочернюю Entity для каждой частицы»; используйте настройку sub-emitter, если нужна эта возможность.

Настраивайте в полезном порядке

  1. Покажите один простой эффект с известной камерой, материалом и разумными границами.
  2. Задайте движение, время жизни и пространство координат.
  3. Настройте вместимость и плотность, затем распределение всплеска во времени.
  4. Замените тестовую геометрию ассетами эффекта и настройте цвет/alpha поверхности.
  5. Измерьте характерное число перекрывающихся эффектов, а не один изолированный источник. Проверьте устройство, рендерер и движение перед снижением частоты симуляции.

Проверки runtime для этой статьи — остановка эмиссии, завершение one-shot, перезапуск, пауза, координаты и AABB/draw pass сопутствующего GPU-примера. Изменение плотности AmountRatio, стоимость Preprocess, сочетания фиксированного шага/интерполяции, коллизии, sub-emitters, шлейфы и экспорт проверяются отдельно.

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

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

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

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