Документация к системе частиц
в игре
Clive Barker’s Undying
 
Ричард Бенсон
rbenson@earthlink.net
 
Electronic Arts - 2001
 
 
Введение

 

Это всего лишь краткий обзор особенностей системы частиц (эмиттеров) «движка» Undying. Лучший способ узнать, что он может делать, - это «испачкать руки» и начать играться с различными параметрами, которые можно выставить в редакторе UndEd.

Имейте в виду, что любой эмиттер частиц будет работать, если вы его добавите из набора акторов и настроите (или оставите настройки по умолчанию для ParticleFX). Копирование уже существующих на карте эмиттеров недопустимо. Они не будут работать!

 

Base, Max, Rand:

 

Base: Это нормальные значения системы. При использовании параметров Max базовые параметры будут выступать в качестве базовых или минимальных параметров. (см. ниже Max)

 

Max:  При установке параметров Base и Max, вы будете иметь систему частиц, меняющуюся между двумя отдельными настройками для параметра Strength (устойчивость) системы.

Так что думайте обо всех основных параметрах Base и Max, как о двух отдельных системах. Представьте, что базовые параметры заданы таким образом, что система выглядит как тлеющий огонь, из которого поднимается только дым. Теперь представьте, что параметры Max настроены так, чтобы выглядеть как бушующий огонь. Теперь, если вы установите Strength системы на 0.0, она будет выглядеть как дым, а если вы установите ее на 1.0, она будет выглядеть как бушующий огонь. Если затем написать функцию-скрипт, которая вычисляла бы устойчивость системы по другим внешним факторам, то внешний вид системы можно было бы контролировать другими способами. Вы можете написать триггер, который регулирует устойчивость системы в зависимости от здоровья игрока или расстояния игрока до системы частиц и т.д.

 

Rand: Фактор случайности, который можно использовать везде, где он доступен. Например, у вас есть параметр Срок Жизни (Lifetime). Базовый набор Lifetime.Base=1.0 и Lifetime.Rand=0,5, тогда «жизнь» ваших частиц будет варьироваться от 1,0 до 1,5. Как вы можете видеть, фактор Rand является аддитивным.

 

ParticleFX и AeonsParticleFX

 

ParticleFX - это система частиц по умолчанию для Undying, без излишеств и произвольных настроек.

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

 

Настройка активации актора AeonsParticleFX триггером

 

NormalParticles – тоже, что и ParticleFX (по-умолчанию).

TriggerControl – триггер, «прикрепленный» к системе частиц, должен быть активен, чтобы система испускала частицы.

TriggerToggles - триггер, «прикрепленный» к системе, включает или выключает систему частиц каждый раз, когда активируется триггер.

TriggerTurnsOff - триггер, «прикрепленный» к системе частиц, выключит систему только если она включена.

TriggerTurnsOn - триггер, «прикрепленный» к системе, включит систему только если она выключена.

 

ПРИМЕЧАНИЕ: «Прикрепить» триггер к актору AeonsParticleFX очень просто. Используйте параметр Event актора Trigger и впишите то же значение в параметр Tag актора AeonsParticleFX.

 

Редактирование в реальном времени

 

Вы можете редактировать систему частиц в режиме реального времени в UndEd и сразу видеть результаты изменений!

Чтобы попробовать, просто откройте любую карту и поместите объект Particle FX. ParticleFX находится среди классов видимых (Visible) акторов.

Теперь нажмите на значок автоматического обновления в 3D-представлении редактора (это маленький значок джойстика в левом верхнем углу)

Теперь вы должны увидеть желтые и оранжевые частицы.

Теперь, кликните правой кнопкой «мыши» на размещённом объекте Particle FX и выберите Свойства (Properties).

Откройте категорию PS_Appearance. Затем откройте начальную категорию цвета.

Нажмите на оранжевую цветную полосу (базовый параметр), затем нажмите на маленькую кнопку с эллипсами (...).

Выберите другой начальный цвет и нажмите OK.

 

Эмиссия

 

AngularSpreadWidth / AngularSpreadHeight

 

AngularSpreadWidth и AngularSpreadHeight задаются в градусах. Допустимый диапазон от 0 до 180 градусов.

 

Примеры:

Установка обоих параметров в 0 градусов приведёт к испусканию узкой линии частиц в направлении, куда ориентирована система.

Установка обоих параметров в 180 приведёт к сферической эмиссии.

 

bPrime

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

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

 

Decay

В настоящее время не реализовано.   

       

Distribution

DIST_Uniform

Частицы распределяются только тогда, когда система частиц движется от своего текущего местоположения. Также, ParticlesPerSec означает число единиц на 1 частицу, когда используется распределение DIST_Uniform. Так, если ParticlesPerSec=32, то новая частица будет испущена каждый раз, как ParticleSystem сдвинется на 32 единицы.

 

ПРИМЕЧАНИЕ: Это отлично подходит для визуальных эффектов наподобие Motion Blur.

 

DIST_Random

Типичная случайная эмиссия.

 

ParticlesAlive

Максимальное число частиц, одновременно разрешённое. Если будет испущено большее число частиц, более «старые» частицы будут уничтожены.       

 

ParticlesMax

Максимальное число частиц, которое система может испустить. Т.е. система имеет конечное число частиц. После того, как все частицы будут испущены и больше не будут «живы», система уничтожит себя. 

 

ParticlesPerSec

Число частиц, испускаемое каждую секунду. За исключением случая DIST_Uniform, где это значение интерпретируется как количество единиц между выбросами частиц (смыше).

 

Period

В настоящее время не реализовано.

 

SourceDepth / SourceHeight / SourceWidth

 

Используя эти три параметра, вы можете эмулировать испускание примитивов в одну линию, в форме прямоугольного листа и т.д. На диаграмме, ось X представляет направление системы и является глубиной (Depth). Ось Y - это ширина, а ось Z - Высота (Height). Эти значения выражаются в условных единицах редактора с точностью до 6-го знака после разделителя.

Примечание: Это расстояние от начала системы (Origin) до края, поэтому в действительности истинные размеры вдвое превышают введённые вами значения.

 

Примеры:

Эмиттер в форме листа (Sheet) может использовать такие параметры: SourceWidth=500, SourceHeight=500, SourceDepth=0

Эмиттер в форме линии (Line) может использовать такие параметры: SourceWidth=500, SourceHeight=5, SourceDepth=5

 

Движение

 

Attraction

Определяет насколько частица тяготеет к центру системы. Значения находятся в «Мировом пространстве», поэтому не имеет значения, в каком направлении ориентирована система.

 

bSystemRelative

Все движения частиц будут относительны расположения системы. 

 

bUpdate

Будет ли система модифицировать Цвет (Color), Alpha и Размер (Size) со временем. Этот параметр почти всегда должно быть включен. Скриптовые частицы обычно являются  исключением.

 

bVelocityRelative

Если параметр включен, тогда скорости частиц будут относительны скорости системы. Таким образом, если система имеет скорость 500 единиц в секунду, и она испускает частицу со скоростью 0 единиц в секунду, частица все равно будет иметь скорость 500 единиц в секунду.

 

bWindPerParticle

Если это значение равно True, то система будет выполнять отдельные вычисления направления ветра для каждой частицы. Это очень грузит процессор и должно использоваться экономно.

 

Chaos

Насколько хаотично будут меняться скорости частиц.   

 

ChaosDelay

Задержка в секундах при включенном параметре Chaos. Чем меньше значение, тем более случайными будут казаться частицы. Типичные значения 0.25 - 2.00 секунды. Экспериментируйте, чтобы получить различные эффекты.

 

Damping

Фактор, имитирующий сопротивление воздуха. Это приведет к замедлению скорости частиц с течением времени.

 

Elasticity

Какая часть скорости частицы остаётся после удара. Типичные значения 0.0 - 0.5. Большинство частиц должны иметь упругость, равную 0,0, так как это означает, что они ни с чем не сталкиваются. Установка упругости на что-либо кроме 0.0 очень грузит процессор, так как расчёты должны быть сделаны для частицы в каждом кадре, чтобы увидеть, если она столкнулась с чем-либо.

 

Gravity

Вектор, который может имитировать другую гравитационную силу помимо гравитации уровня. Как ветер, дующий со стороны, например. Располагается в «Мировых координатах», поэтому не имеет значения, в каком направлении находится система. Это скорость в единицах в секунду.

 

GravityModifier

Насколько гравитация в текущей зоне влияет на частицы. Симулирует массу частицы. Типичные значения 0.0 - 1.0.

 

Lifetime

Сколько времени частица «проживёт» перед исчезновением.

 

Speed

Скорость частицы при испускании. Измеряется в игровых единицах в секунду.

 

WindModifier

Наподобие GravityModifier, но относится к ветру в зоне и его влиянию на движение частиц. Типичные значения 0.0 - 1.0.

 

ПРИМЕЧАНИЕ: Система должна иметь Демпфирующий фактор (Damping) >0, чтобы сработал WindModifier.

 

Вид частиц

 

AlphaDelay

Сколько секунд ждать до начала линейного перехода от AlphaStart к AlphaEnd.

 

AlphaStart / AlphaEnd

Непрозрачность частиц при излучении и непосредственно перед исчезновением. Значения линейно интерполируются на протяжении всего времени существования частицы. 0.0 – частица полностью невидима, а 1.0 - полностью непрозрачна.

 

ColorDelay

Сколько секунд ждать до начала линейного перехода от ColorStart к ColorEnd.

 

ColorStart / ColorEnd

Цвет частиц при излучении и непосредственно перед исчезновением. Значения линейно интерполируются на протяжении всего времени существования частицы. 

 

ПРИМЕЧАНИЕ: Относительно поля Rand. Оттенок (Hue) цвета Rand сохраняется. Случайность заключается в насыщенности (Saturation) цвета Rand.

 

ColorPalette

Используйте 256 значений палитры текстур, чтобы задать точный переход цвета. Очень полезно, когда линейные цветовые переходы не обеспечивают достаточного контроля. Частицы будут начинаться с первого оттенка в палитре и перемещаться по палитре линейно, так что их оттенок заканчится на последнем цвете в палитре.

 

DripTime

Сколько секунд частицы остаются неподвижными в месте своего излучения, прежде чем вырваться на свободу. Они увеличиваются в размере из точки SizeWidth и SizeLength до высвобождения.

 

ПРИМЕЧАНИЕ: Не рекомендуется использовать!

 

RenderPrimitive

Расшифровку параметров смотрите ниже в категории SizeWidth / SizeLength.

 

PPRIM_Billboard

PPRIM_Line

PPRIM_TriTube

PPRIM_Liquid

PPRIM_Shard

 

RenderStyle

Текстурный режим, используемый для отображения частиц. 

 

STY_None

STY_Normal

STY_Masked

STY_Translucent

STY_Modulated

STY_AlphaBlend

STY_Highlight

 

ПРИМЕЧАНИЕ: Это значение находится в категории DISPLAY секции Default Properties.

 

SizeDelay

Задержка в секундах перед линейным переходом от AlphaStart к AlphaEnd.

 

SizeEndScale

Насколько велика будет частица непосредственно перед «смертью» по отношению к исходным размерам при излучении.

 

SizeWidth / SizeLength

Единицы являются мировыми единицами. Они имеют различные значения в зависимости от формы RenderPrimitive.

 

PPRIM_Billboard

Типичный прямоугольник. SizeWidth - ширина прямоугольника, а SizeHeight - высота.

 

PPRIM_Line

Линии рисуются от одной частицы к другой. SizeWidth используется в качестве ширины сегмента линии.

 

PPRIM_TriTube

Треугольная трубка тянется от частицы к частице. Глядя вниз по трубке, SizeWidth - это её ширина, а SizeHeight - высота.

 

PPRIM_Liquid

Size - это ширина капли. Длина умножается на длину хвоста. Значение 1,0 означает использование нормальной расчетной длины капли, пропорциональной скорости. Значение 0,5 не позволит сильно растягиваться, в то время как значение 5,0 позволит жидкости сильно растягиваться. Опять же, важно отметить, что растяжение выполняется относительно скорости частицы.

 

PPRIM_Shard

Треугольник примитивный. SizeWidth и SizeHeight имеют то же значение, что и у формы TriTube выше.

 

SpinRate

Вращение частиц в радианах в секунду. Один полный оборот ~= 6,28 Радиан.

 

ПРИМЕЧАНИЕ: Вы можете использовать Negative Base и положительное значение Rand, чтобы получить действительно случайное вращение. Частицы будут вращаться и по часовой стрелке (Clockwise), и против часовой стрелки (Counter Clockwise).

 

Strength

Текущая устойчивость системы. Диапазон 0.0 - 1.0 используется для линейной интерполяции между базовым и максимальным набором параметров, который имеет каждая система. Это простой способ получить очень сложное поведение из системы частиц, используя только 2 набора параметров и одно интерполяционное значение.

 

Textures

Текстуры, которые будут нанесены на частицы. В настоящее время используется только слот Textures[0].