автор статьи - Vam
1. Вступление.
Эффекты излучаемых частиц (ParticleFX), далее PFX, которые может производить система Готики, задаются набором параметров. Определение эффектов и их параметров выполняется в Daedalus скриптах. Рассмотрим эти файлы:
_WORK\DATA\SCRIPTS\SYSTEM\ParticleFX.src – исходный файл для компиляции всех файлов PFX системы.
_WORK\DATA\SCRIPTS\SYSTEM\_INTERN\ParticleFX.d – декларация класса C_PARTICLEFX.
_WORK\DATA\SCRIPTS\SYSTEM\_INTERN\PfxInst.d – содержит определения общих инстанций PFX системы.
_WORK\DATA\SCRIPTS\SYSTEM\_INTERN\PfxInstMagic.d – содержит определения инстанций магических заклинаний PFX системы.
_WORK\DATA\SCRIPTS\SYSTEM\_INTERN\PfxInstEngine.d – содержит определения инстанций ядра PFX системы. Они не должны изменяться!
PFX эффекты могут вызываться также из .MDS файлов и синхронизироваться с анимациями. Смотри для этого соответствующую документацию.
Что можно сказать про быстродействие, то оно прямо зависит от произведённого кол-ва частиц и удаления их от камеры. Чем больше эти параметры, тем ниже быстродействие, причем оно в большей степени зависит от удаленности частиц от камеры.
Активизация следующих особенностей PFX эффектов значительно уменьшает быстродействие: – Столкновения частиц – Пометки поверхности – Остаточный след
2. Параметры PFX эффектов.
Параметры как правило редактируются Спейсером, но могут также изменяться в файлах скриптов. В этой статье рассматриваются более 40 параметров PFX эффектов. Имена параметров, их типы, задаваемые значения и примеры значений для каждой группы параметров сведены в таблицу. Параметры, имена которых оканчиваются на S, являются строковыми переменными и инициализируются одним или несколькими значениями, заключенными в кавычки и разделёнными пробелом. Если кол-во значений ошибочно, то берутся значения, стоящие в списке первыми, также допустимо не инициализировать строковую переменную.
Значение BOOL указывает, что параметр может принимать значение истина (1 или TRUE) или ложь (0 или FALSE). Значение VEC указывает, что параметр является вектором размерности n из реальных чисел. Значение ANGLE указывает, что параметр является углом и его значение задается в градусах. Значение FOR указывает ссылку на систему отсчета, действительными системами отсчета являются World (мир) и Object (объект), причем PFX эффекты для объекта значительно снижают быстродействие и должны использоваться только в том случае, если это действительно необходимо.
2.1. Излучение – Временные параметры
Тип |
Параметр |
Значение |
Пример |
VAR FLOAT |
ppsValue |
число |
64 |
VAR STRING |
ppsScaleKeys_S |
строка |
“1 0.2 0 16 0.1” |
VAR INT |
ppsIsLooping |
BOOL |
1 |
VAR INT |
ppsIsSmooth |
BOOL |
0 |
VAR FLOAT |
ppsFPS |
число |
0.5 |
VAR STRING |
ppsCreateEm_S |
строка |
??? |
VAR FLOAT |
ppsCreateEmDelay |
число |
??? |
Pps в имени переменной означает кол-во частиц в секунду (particles per second). Эти параметры управляют временным поведением излучаемых частиц. Параметр ppsValue определяет кол-во излучаемых частиц в секунду. Периоды времени излучения задаются параметром ppsScaleKeys_S. Если ScaleKeys задан, то будет воспроизведен список этих ключей с определенной скоростью (ppsFPS), причем будет выполнена интерполяция (сглаживание) между отдельными ключами, если ppsIsSmooth установлен. Если установлен параметр ppsIsLooping, список будет излучаться циклически, иначе список будет излучен один раз и эффект закончится как только исчезнут последние частицы. Фактически в секунду излучается кол-во частиц определенное формулой ppsValue * отдельное значение ppsScaleKeys. В примере в первую секунду будет выпущено 64 частицы, во вторую – 13 частиц, в третью – 0 и т.д. Если ScaleKeys не задан и параметр ppsIsLooping сброшен, то ppsValue определяет кол-во частиц, которые будут выпущены сразу в начале эффекта.
Описание параметров ppsCreateEm_S и ppsCreateEmDelay мне не известно.
Примеры:
Однократное излучение
PpsValue = 40;
PpsScaleKeys_S = ” ”;
PpsIsLooping = 0;
PpsIsSmooth = 0;
PpsFPS = 0;
Постоянное излучение
PpsValue = 40;
PpsScaleKeys_S = ” ”;
PpsIsLooping = 1;
PpsIsSmooth = 0;
PpsFPS = 0;
Излучение во временном периоде
PpsValue = 40;
PpsScaleKeys_S = “1.0”;
PpsIsLooping = 0;
PpsIsSmooth = 0;
PpsFPS = 5;
Излучение порывами
PpsValue = 40;
PpsScaleKeys_S = “1.0 0 0 0 1.0 1 6.0 0.2 0.5”;
PpsIsLooping = 1;
PpsIsSmooth = 1;
PpsFPS = 0.8;
2.2. Излучение – Пространственное распределение
Тип |
Параметр |
Значение |
Пример |
VAR STRING |
shpType_S |
“point,line,box,circle,sphere,mesh” |
“mesh” |
VAR STRING |
shpFOR_S |
“world,object” |
“world” |
VAR STRING |
shpOffsetVec_S |
VEC3 |
“0 1 0” |
VAR STRING |
shpDistribType_S |
”RAND,UNIFORM,WALK” |
“WALK” |
VAR FLOAT |
shpDistribWalkSpeed |
число |
0.0001 |
VAR INT |
shpIsVolume |
BOOL |
0 |
VAR STRING |
shpDim_S |
VEC1/3 |
“10”, “23 32 20” |
VAR STRING |
snpMesh_S |
строка |
“cross.3ds” |
VAR INT |
shpMeshRender_B |
BOOL |
0 |
VAR STRING |
shpScaleKeys_S |
строка |
”[1.0] [0.8 0.9 0.2] [1.0]” |
VAR INT |
shpScaleIsLooping |
BOOL |
0 |
VAR INT |
shpScaleIsSmooth |
BOOL |
0 |
VAR FLOAT |
shpScaleFPS |
число |
2 |
Эти параметры определяют места, в которых создаются новые частицы. Для этой цели задаются параметры форм/поверхностей на которых создаются частицы. Устанавливаются также величины, локальные смещения и временное масштабирование излучающих форм.
Параметр shpType_S задает тип излучающей поверхности, выбирается из списка. Если задан тип mesh, то параметром snpMesh_S определяется имя файла поверхности. Если установлен shpMeshRender_B, то производится рендеринг поверхности вместе с излучаемыми частицами. Тип point (излучение из точки) является самым быстрым типом.
Параметр shpFOR_S определяет должно ли следовать излучение за поворотами поверхности (object – да, world – нет).
Параметр shpOffsetVec_S задает вектор смещения локальной системы координат источника излучения.
Параметр shpDistribType_S задает распределение излучаемых частиц по поверхности. RAND – случайное место излучения, UNIFORM – место выбирается упорядоченно и равномерно (работает только с типом line и circle), WALK – место выбирается упорядоченно и равномерно, но перемещается по поверхности(работает только с типом line и circle). Параметр shpDistribWalkSpeed задает скорость перемещения по поверхности источника излучения.
Параметр shpIsVolume определяет где должны рождаться частицы, на краю поверхности – 0, на всей площади поверхности – 1.
Параметр shpDim_S задает размер излучаемой поверхности (кроме типа mesh) и является в зависимости от типа поверхности одномерным или трехмерным вектором (для line,circle,sphere – 1D, для box – 3D).
Параметры shpScaleKeys_S, shpScaleIsLooping, shpScaleIsSmooth и shpScaleFPS определяют масштабирование поверхности во времени и по описанию идентичны соответствующим pps параметрам.
2.3. Частицы – Направление полета и скорость движения
Тип |
Параметр |
Значение |
Пример |
VAR STRING |
dirMode_S |
“NONE,RAND,DIR,TARGET,MESH” |
“mesh” |
VAR STRING |
dirFOR_S |
“world,object” |
“world” |
VAR STRING |
dirModeTargetFOR_S |
“world,object” |
“world” |
VAR STRING |
dirModeTargetPos_S |
VEC3 |
“30 23 67” |
VAR FLOAT |
dirAngleHead |
ANGLE [0..359] |
100 |
VAR FLOAT |
dirAngleHeadVar |
ANGLE [0..179] |
50 |
VAR FLOAT |
dirAngleElev |
ANGLE [-90..+90] |
0 |
VAR FLOAT |
dirAngleElevVar |
ANGLE [-90..+90] |
8 |
VAR FLOAT |
velAvg |
CM/MSEC |
0.3 |
VAR FLOAT |
velVar |
CM/MSEC |
0.1 |
Эти параметры определяют направление полета и скорость излучаемых частиц.
Параметр dirMode_S задает направление полета частицы.
NONE или RAND – случайное направление полета частиц, излучаются шарообразно относительно источника.
DIR – направление полета частиц задается параметрами dirAngleHead и dirAngleElev, это углы соответственно направления движения и высоты подъема. Если заданы параметры dirAngleHeadVar и dirAngleElevVar, то выполняется дисперсия (изменение) заданных углов в пределах установленных величин. Замечание: по причине оптимизации углы движком точно не устанавливаются и можно получить непредсказуемое направление полета частиц, однако, юстировкой углов можно добиться приемлемого эффекта.
TARGET – излучение частиц направлено на определенную цель. Координаты цели задаются параметром dirModeTargetPos_S, в зависимости от типа цели dirModeTargetFOR_S, координаты являются локальными (для object) или глобальными (для world).
MESH – излучение с mesh поверхности, углы и дисперсии углов аналогичны значению DIR.
Параметры velAvg и velVar задают соответственно среднюю скорость и дисперсию скорости полета частиц.
Параметр dirFOR_S определяет к чему относится поверхность к объекту или миру.
2.4. Частицы – Время жизни
Тип |
Параметр |
Значение |
Пример |
VAR FLOAT |
lspPartAvg |
MSEC |
700 |
VAR FLOAT |
lspPartVar |
MSEC |
300 |
Параметры lspPartAvg и lspPartVar задают соответственно среднее время и дисперсию времени жизни частиц.
2.5. Частицы – Летательные способности
Тип |
Параметр |
Значение |
Пример |
VAR STRING |
flyGravity_S |
VEC3 |
“0 -0.0001 0” |
VAR INT |
flyCollDet_B |
[0,1,2,3,4] |
3 |
Параметр flyGravity_S задает вектор гравитации в относительной системе координат мира.
Параметр flyCollDet_B определяет реакцию частиц при столкновении. Имеются следующие варианты: 0 – проверка на столкновение не проводится, 1 – тормозящее отражение, 2 – ускоряющее отражение, 3 – обнуление скорости частицы, 4 – удаление частицы. При включенном параметре уменьшается быстродействие.
2.6. Частицы – Визуализация
Тип |
Параметр |
Значение |
Пример |
VAR STRING |
visName_S |
строка |
“NAME.TGA/.3DS” |
VAR STRING |
visOrientation_S |
“NONE,VELO,VELO3D” |
“VELO” |
VAR INT |
visTexIsQuadPoly |
BOOL |
0 |
VAR FLOAT |
visTexAniFPS |
число |
0.5 |
VAR INT |
visTexAniIsLooping |
BOOL |
0 |
VAR STRING |
visTexColorStart_S |
RGB [0..255,0..255,0..255] |
“155 91 25” |
VAR STRING |
visTexColorEnd_S |
RGB [0..255,0..255,0..255] |
“155 91 25” |
VAR STRING |
visSizeStart_S |
VEC3 |
“50 50” |
VAR FLOAT |
visSizeEndScale |
[0..1..x] |
2 |
VAR STRING |
visAlphaFunc_S |
“NONE,BLEND,ADD,MUL” |
“BLEND” |
VAR FLOAT |
visAlphaStart |
[0..255] |
255 |
VAR FLOAT |
visAlphaEnd |
[0..255] |
255 |
Параметр visName_S задает имя файла визуализации частиц. Могут использоваться как TGA так и 3DS файлы соответственно для изменения или анимации частиц.
Параметр visOrientation_S определяет с какой ориентацией будет производиться рендеринг частиц.
Параметр visTexIsQuadPoly определяет типы анимации визуализации текстуры (triMesh или quadMesh). Tri частицы являются более быстрыми в сравнении с Quad частицами.
Параметр visTexAniFPS задает скорость анимации частиц.
Параметр visTexAniIsLooping определяет, должна ли останавливаться анимация частиц на последнем фрейме.
Параметры «color, size, alpha» задают соответственно цвет, размер и альфа функцию частиц в начале жизни (start) и в конце жизни (end). В процессе жизни производится линейная интерполяция от начального до конечного значений.
2.7. Другие эффекты
Тип |
Параметр |
Значение |
Пример |
VAR FLOAT |
trlFadeSpeed |
ALPHA/MSEC [0..x] |
0.4 |
VAR STRING |
trlTexture_S |
строка |
“Trail.tga” |
VAR FLOAT |
trlWidth |
CM |
5 |
VAR FLOAT |
mrkFadeSpeed |
ALPHA/MSEC [0..x] |
0.1 |
VAR STRING |
mrkTexture_S |
строка |
“Mark.tga” |
VAR FLOAT |
mrkSize |
CM |
50 |
VAR INT |
useEmittersFOR |
BOOL |
0 |
VAR STRING |
timeStartEnd_S |
строка |
“11 16” |
VAR INT |
m_bIsAmbientPFX |
BOOL |
0 |
Параметры визуализации траектории частиц trlTexture_S, trlFadeSpeed и trlWidth задают соответственно файл текстуры следа траектории, скорость угасания следа и ширину следа от частиц.
Параметры следов столкновения с поверхностью mrkTexture_S, mrkFadeSpeed и mrkSize задают соответственно файл текстуры оставленного следа на поверхности, скорость угасания следа и размер следа от частиц. Следы имеют форму четырехсторонних полигонов.
Параметр useEmittersFOR включает вычисление положения каждой частицы в месте излучения внутри локального фрейма. В комбинации с flyCollDet_B значительно уменьшает быстродействие.
Параметр timeStartEnd_S задает временной промежуток, в котором PFX выполняется (в примере с 11 до 16 часов).
Параметр m_bIsAmbientPFX указывает, что этот PFX может быть окружающим, т.е. с его помощью строятся погодные эффекты и он может быть отключен через Gothic.ini ( параметр [ENGINE] / noAmbientPFX ).