Системы частиц
Система частиц — действительно универсальная техника, позволяющая создавать сложные движущиеся структуры, производящие динамические и «нечеткие» эффекты. Эти структуры используются для моделирования абстрактных эффектов огня, дыма, взрывов, электричества, фонтанов, ракетных следов, стая, магии и многих других. Все эти эффекты трудно воспроизвести с помощью традиционных жестких объектов: частицы представлены не набором примитивных элементов поверхности, а точечными массами, образующими объем примитивов частиц. Еще одна отличительная особенность — частицы не статичны — они могут со временем менять не только свое положение, но и форму.
Система частиц состоит из трех основных сущностей:
- Эмиттер — источник, испускающий частицы в соответствии со значениями, установленными в параметрах группы Emitter.
- Сами частицы, которые испускаются согласно заранее заданному поведению после испускания.
- Дополнительные физические эффекты, применяемые к частицам и влияющие на их поведение.
Смотрите также#
- Материал particles_base для настройки внешнего вида частиц
- Класс ObjectParticles для управления частицами через API
- Набор сэмплов, находящихся в комплекте Art Samples
Создание частиц#
Чтобы создать частицы, выполните следующие действия:
- В строке меню щелкните Create -> Particle System -> Particles.
- Поместите объект Particles где-нибудь в мире.
- Настройте параметры частиц.
Параметры излучателя#
Поведение эмиттера частиц задается в параметрах Emitter.
Clear On Enable | Разрешает повторную инициализацию системы частиц каждый раз при ее включении. Когда эта опция отключена, включение системы частиц восстанавливает состояние, в котором она была до выключения. |
---|---|
Emitter Enabled | Включает эмиттер. |
Emitter Sync | Включает синхронизацию дочерней системы частиц с родительской, даже если для дочерней системы частиц опция Emitter Enabled отключена. |
Emitter Shape |
Форма объема, внутри которого генерируются частицы: |
Emitter Size | Размер источника частиц. Количество полей (будь то радиус или граничные размеры) зависит от выбранной формы. |
Particles Type |
|
Sequence Order |
Порядок рендеринга систем частиц, особенно при создании сложных эффектов, таких как выстрелы (с дульной вспышкой, дымом и самим выстрелом, каждый из которых представлен отдельной системой частиц). Этот параметр очень похож на Rendering Order в настройках материалов. Но он позволяет установить последовательность рендеринга внутри иерархии системы частиц, чтобы избежать таких ситуаций, когда дым от далекого выстрела рендерится поверх огня выстрела переднего плана.
|
Emitter Shift | Включение этого флажка заставляет эмиттер генерировать частицы только тогда, когда система частиц движется. |
Emitter Continuous | Включает непрерывные частицы, которые следуют за смещением эмиттера. |
Texture Atlas | Включение этой функции приводит к следующему: случайное изображение из текстуры альбедо подбирается для каждой частицы. Чтобы использовать эту опцию, Анимация текстуры должны быть отключена. |
Texture Atlas Size | Размер текстурного атласа. |
Random Flip X | Переворот случайно испускаемых частиц по горизонтали (по оси X). |
Random Flip Y | Переворот случайно испускаемых частиц по вертикали (по оси Y). |
Warming On Start | Включает и выключает инициализацию системы частиц с иллюзией предшествующей активности. Система частиц развивается со временем, поэтому после встречи с ней в виртуальном мире система только начинает работать, частица за частицей, пока вся система не приобретет желаемый вид. Когда персонаж выйдет на поляну, мы увидим, как постепенно разгорается огонь. Стартовый прогрев для частиц позволяет сразу рендерить полноценную систему частиц. Техническая реализация стартового прогрева следующая: когда система частиц инициализируется при столкновении, ее жизнь вычисляется, начиная с рождения первой частицы до ее исчезновения. После этого система частиц считается развитой и отображается в этом состоянии. Расчеты производятся с фиксированной частотой кадров 25 кадров в секунду, что является минимумом, необходимым для правильного моделирования систем частиц (см. также информацию о корреляции между частотой кадров). Стартовый прогрев можно включить без какого-либо негативного влияния на любые системы частиц, кроме огромных. |
Max Warming Time (Sec) | Максимальное время прогрева системы частиц. |
Spawn Rate | Количество действий возрождения в секунду. Значение определяет, сколько раз определенное количество частиц будет создано за одну секунду. Например, значение 5 соответствует 5 действиям появления в секунду. 0 приводит к отсутствию частиц вообще. |
Number Per Spawn | Количество частиц, которые будут порождаться одновременно каждый раз в соответствии с параметром Spawn Rate. |
Spawn Threshold | Порог количества частиц в зависимости от скорости родительских частиц. Порог для эмиттера random функционирует только с системой частиц в качестве родительской ноды.
|
Limit Per Spawn | Общее максимальное количество частиц, испускаемых за раз. Этот параметр указывает количество частиц, которые могут одновременно существовать в мире. Другими словами, количество существующих в мире частиц не может превышать предельное значение. Например, если значение Number per Spawn равно 10, а значение Limit Per Spawn равно 5, будет испущено 5 частиц. И никакие частицы не будут порождаться, пока существуют предыдущие. |
Life Time (Sec) | Продолжительность существования частиц после испускания в секундах. Этот параметр также имеет значение Spread, которое создает разнообразие значения Life Time в секундах. |
Delay | Эта опция определяет время, которое должно пройти между инициализацией родительской системы и инициализацией дочерней ноды. Если задана какая-либо задержка, родительская система начинает испускать частицы, а после задержки активируется генерация дочерних частиц. Если у системы частиц нет дочерних элементов, задержка определяет время, по истечении которого частицы испускаются. Этот параметр также имеет значение Spread, которое создает различную задержку инициализации частицы в секундах. |
Period |
Продолжительность паузы между циклами генерации в секундах.
Этот параметр также имеет значение Spread, которое создает вариацию значения периода в секундах. |
Duration | Продолжительность цикла генерации, в течение которого происходит испускание, в секундах.
Этот параметр также имеет значение Spread, которое создает разнообразие значений Duration, в секундах. |
Spread (+/-) | Опция Spread вводит дополнительную модуляцию соответствующего параметра. Он представляет собой диапазон значений, которые могут быть случайным образом добавлены или вычтены из указанного значения параметра. |
Поведение после испускания#
Этот набор параметров определяет, как частицы ведут себя после испускания:
Параметры настройки значений#
Большинство параметров в этом разделе имеют несколько вариантов установки значения:
- Const — значение точное и не меняется с течением времени.
- Between Const — задается интервал, из которого выбирается случайное значение для каждого экземпляра.
-
Curve — значение параметра изменяется во времени в зависимости от кривой, задаваемой в Редакторе кривых.
При малых значениях (близких к 0), кривые могут терять в точности, если значение Max Value существенно больше, чем фактическое максимальное значение на кривой. Чтобы этого избежать надо установить Max Value максимально приближенным к фактическому максимуму. - Between Curve — есть две кривые, установленные в Редакторе кривых, которые определяют пределы, и в каждый момент времени в этих пределах берется случайное значение. Значение параметра изменяется со временем на основе этого случайно сгенерированного набора значений.
Чтобы выбрать желаемый тип значения, используйте кнопку с изображением шестеренки.
Depth Sort | Сортировка по глубине требуется, если частицы используют альфа-смешивание (кроме аддитивного). Если этот параметр не включен, то на основе данных буфера глубины непрозрачные объекты, расположенные дальше, могут неправильно отображаться перед прозрачными частицами. При сортировке по глубине геометрия отображается в порядке от задней части к передней, что исключает визуальные артефакты. | ||||
---|---|---|---|---|---|
Emitter Based | Включение этой опции заставляет частицы двигаться вместе с эмиттером. | ||||
Position | Координаты положения частицы относительно излучателя по осям X, Y и Z. | ||||
Gravity |
Сила тяжести, действующая на частицы по осям X, Y и Z.
Вращение ноды системы частиц не влияет на вектор гравитации. |
||||
Direction | Направление, в котором движутся все испускаемые частицы, образуя поток, заданное по осям X, Y и Z. | ||||
Velocity | Скорость движения частиц в заданном направлении, в единицах (unit) в секунду. Чтобы поток выглядел естественно, конечная скорость каждой отдельной частицы может отличаться, если задан диапазон значений. | ||||
Linear Damping | Уменьшение линейной скорости частиц со временем. Этот параметр используется для моделирования эффекта трения среды для частиц. | ||||
Angle | Угол ориентации частиц в пространстве, в градусах. |
||||
Rotation Speed | Угловая скорость частиц в градусах в секунду.
|
||||
Radius | Радиус (половинный размер) частицы. | ||||
Increase In Radius | Увеличение размера частицы в единицах в секунду.
|
||||
Screen Size Mode |
Режим размера на экране, который будет использоваться для частиц. Этот режим определяет, следует ли ограничивать максимальный и минимальный размеры испускаемых частиц относительно размера экрана или нет (например, чтобы избежать случаев, когда снежинки или капли дождя закрывают обзор, если они находятся слишком близко к камере или когда они становятся невидимыми по мере увеличения расстояния до камеры). Доступны три режима:
|
||||
Screen Min Size |
Минимальный размер на экране, устанавливаемый для частиц, ограничивающий минимальную долю экрана, которую может занимать одна частица:
|
||||
Screen Max Size |
Максимальный размер на экране, устанавливаемый для частиц, ограничивающий максимальную долю экрана, которую может занимать одна частица:
|
||||
Length Stretch | Растяжка биллборда частиц, доступная для Length Particles. При значении 0 частица длины представляет собой просто квадратный биллборд. При увеличении значения частицы растягиваются в направлении их движения. Результат рассчитывается путем умножения значения растяжения на скорость частицы. Таким образом, чем выше скорость, тем сильнее растягиваются частицы в направлении своего движения, в то время как другая сторона остается той же ширины.
|
||||
Length Flattening | Делает Length Particles не ориентированным на камеру, как обычные частицы билборда, а более перпендикулярным оси Z. При значении 0 частицы не сплющиваются. При максимальном значении 1 частицы будут плоскими (перпендикулярно оси Z) при испускании.
|
Взаимодействие#
Взаимодействие частиц ограничивается применением силы и столкновения с внешними объектами. Есть два метода обнаружения столкновения с внешними объектами: с помощью параметра Physics Intersection или параметра Collision.
Physical Mask | Для более избирательного взаимодействия систем частиц с физическими нодами используется битовая маска physical. Эта битовая маска устанавливается как для системы частиц, так и для силы. Эти маски должны иметь хотя бы одно битовое соответствие, иначе не будет никакого взаимодействия. Другие части маски могут соответствовать маскам других сил, обеспечивая тем самым полный контроль над интеграцией сцены. |
---|---|
Particles Field Mask | Битовая маска для взаимодействия с нодами Particles Field (Deflectors и Spacers). Испускаемые частицы будут подвержены влиянию Particles Field только в том случае, если их маски совпадают (по крайней мере, на один бит). |
Physical Mass |
Чтобы участвовать в динамике сцены, частицы должны иметь определенную массу в килограммах. Это значение определяет интенсивность воздействия физической ноды на поток частиц. Параметр Physical Mass не влияет на другие вычисления.
|
Restitution |
Сила, с которой частицы отскакивают от препятствия. Эта опция очень удобна для моделирования некоторых водных эффектов, включая брызги. Сила эффекта отскока зависит как от параметра restitution самих частиц, так и от значения параметра поверхности restitution, установленного для сталкивающегося объекта (Properties -> Parameters -> Restitution), а также от значения restitution, установленного для Particles Deflector.
|
Roughness |
Шероховатость поверхности препятствия, с которым сталкивается частица. Он определяет, разлетаются ли частицы в разных направлениях или реагируют как однородно направленный поток.
|
Collision |
Включает обнаружение столкновений по всей форме частицы. Столкновения обнаруживаются только для совпадающих битовых масок collision. |
Intersection |
Включает обнаружение пересечения с центром частицы. Физические пересечения обнаруживаются для совпадающих битовых масок Physics Intersection. |
Destroy In Collision/Intersection | Включает и выключает отбраковку частиц, которые уже подверглись столкновению или пересечению. |
Рендеринг в текстуру#
Частицы могут быть визуализированы в процедурную текстуру, которая будет использоваться объектами Orthographic Decal или Field Height. Эту функцию можно использовать, например, для создания эффектов следа от корабля или брызг масла.
Доступны следующие настройки:
Rendering | Включает рендеринг частиц в процедурную текстуру. |
---|---|
Positioning |
Определяет режим позиционирования, который будет использоваться для дочерних нод (декаль или поле) с использованием процедурной текстуры, в которую визуализируется система частиц. Доступны следующие значения:
Вступает в силу только тогда, когда в Procedural Parenting выбрано значение Children. |
Parenting |
Определяет взаимосвязь между системой частиц и нодой типа Decal / Field, использующей процедурную текстуру, в которой отображается система частиц:
|
Resolution |
Задает разрешение процедурной текстуры, в которой визуализируются частицы.
|
Дополнительные физические эффекты#
Более сложные изменения в дальнейшем движении частиц можно получить, применив дополнительные физические эффекты. Они влияют на движение потока частиц в нужном направлении. Эффекты могут быть трех основных типов:
Нет ограничений на количество дополнительных физических эффектов, применяемых к одной системе частиц, и они могут свободно перекрываться, что позволяет легко и быстро создавать сложные траектории.
Силы#
Вы можете применить действие физических сил к частицам внутри сферического объема, чтобы повлиять на их движение и поведение. Для этого просто добавьте ноду Physical Force, отрегулируйте необходимые настройки и настройте Physical Mask для выборочного воздействия.
Шумы#
Вы можете применить физический шум, добавив поток распределения, основанный на объемной текстуре шума внутри объема кубовидной формы. Для этого просто добавьте ноду Physical Noise, отрегулируйте необходимые настройки и настройте Physical Masks для выборочного включения взаимодействия.
Дефлекторы#
Иногда необходимо создать препятствие для частиц, чтобы заставить их изменить свою траекторию, отскакивая или скользя по определенной поверхности. Для этой цели вы можете использовать ноду Particles Deflector, поверхность, которая не имеет визуального представления, но физически взаимодействует с системами частиц, оставляя другие объекты незатронутыми. Вы можете управлять взаимодействием между частицами и дефлекторами с помощью маски Particles Field: дефлектор будет взаимодействовать с частицами, генерируемыми системой частиц, если они оба имеют совпадающие маски Particles Field (по крайней мере, один бит).
Дополнительная информация о Particles Deflectorпредставлена в этой статье.
Иерархия нод систем частиц#
Для создания сложных эффектов необходимо, чтобы все системы частиц были синхронизированы во времени. Установка системы частиц в качестве родительской ноды приводит к следующему:
- Все системы частиц, которые являются дочерними нодами, синхронизированы относительно своих родительских систем частиц. Если у дочерних элементов есть собственные дети, они все равно синхронизируются с основной родительской системой, которая стоит в самом верху иерархии.
- При создании новой дочерней системы частиц ее необходимо синхронизировать с родительской, отключив и снова включив родительский эмиттер (вкладка Node→ поле Enabled). В этот момент каждая из дочерних систем инициализируется со своими собственными Параметрами эмиттера (такими как продолжительность излучения, продолжительность паузы генерации, и задержка инициализации).
- Отключение или включение родительского эмиттера (вкладка Node→ поле Enabled) влияет на все дочерние системы частиц: они синхронно прекращают или начинают испускать частицы (испускаемые частицы доживают до конца своего времени существования).
- Отключение или включение родительской ноды (вкладка Node→ поле Enabled) также влияет на все дочерние ноды: все системы частиц в иерархии выключаются и включаются — и сохраняют то же состояние, которое было в момент их выключения.
Синхронизация нескольких систем частиц#
Чтобы синхронизировать несколько систем частиц, например, чтобы создать эффект выстрела (с тремя системами частиц: дульная вспышка, дым и пуля), вы можете сделать следующее:
-
Создайте родительскую систему частиц, которая будет использоваться исключительно для целей синхронизации (вы даже можете отключить ее поверхность). Указанный для нее временной интервал в поле Duration должен охватывать интервалы продолжительности и интервалы задержки (если есть) всех дочерних систем частиц. Остальные параметры (Spawn Rate и т.д.) значения не имеют.
-
Добавьте дочерние системы частиц. Для них может быть задано любое время Duration (но оно должно быть меньше, чем у родительской ноды). Например, чтобы синхронизировать все дочерние системы частиц одновременно и порождать только одну частицу, вы можете установить следующее:
- Duration = 0
- Limit Per Spawn = 1
- Spawn Rate = inf/100000
Оптимизация симуляции#
Обновление в каждом кадре огромного количества объектов, которые расположены далеко от камеры и поэтому трудно различимы или наблюдаются как некая масса, является пустой тратой ресурсов.
Чтобы улучшить производительность и избежать чрезмерной нагрузки, симуляцию системы частиц можно обновлять с уменьшенной частотой кадров. Когда система частиц выходит за пределы области, указанной параметром Update Distance Limit, частицы перестают обновляться и статически замирают.
Приведенный ниже набор частот кадров позволяет указать, как часто моделирование частиц должно обновляться, когда система частиц видна, когда видна только ее тень и когда она не видна вообще.
Эта функция включена с настройками по умолчанию, обеспечивающими оптимальную производительность, и может быть настроена для каждого объекта в UnigineEditor или через API во время выполнения.
Если ваш проект, например, содержит систему невидимых частиц (например, с использованием маски Viewport) и некоторую логику, прикрепленную к ее обновлению (например, порождение некоторых видимых частиц при столкновении с объектами), эта логика не будет работать, поскольку система частиц может обновляться по сниженной цене или вообще не обновляться. Чтобы разрешить обновление таких объектов независимо от их видимости, вы можете установить значение infinity для параметра Update Distance Limit и соответствующих значений частоты обновления.
Частицы на основе меша (mesh)#
Можно создавать системы частиц на основе меша. Для этого нужно добавить Mesh Cluster как дочернюю ноду системы частиц (ObjectParticles). После этого эмиттер начинает автоматически генерировать меши.