Показать сообщение отдельно
Старый 05.08.2005, 17:15   #222
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

PFX система (Эффекты излучаемых частиц).

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 * * *
VAR STRING * shpDim_S; * * * * * *VEC1/3 * * * * * * * * * * * * * * *"10", "23 32 20"
VAR STRING * snpMesh_S; * * * * * * * * * * * * * * * * * * * * * * * "cross.3ds"
VAR INT * * *shpMeshRender_B; * * BOOL * * *
VAR STRING * shpScaleKeys_S; * * * * * * * * * * * * * * * * * * * * *"[1.0] [0.8 0.9 0.2] [1.0]"
VAR INT * * *shpScaleIsLooping; * BOOL * * *
VAR INT * * *shpScaleIsSmooth; * *BOOL * * *
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] * * *
VAR FLOAT *dirAngleHeadVar; * *ANGLE [0..179] * * *
VAR FLOAT *dirAngleElev; * * * ANGLE [-90..+90] * * *
VAR FLOAT *dirAngleElevVar; * *ANGLE [-90..+90] * * *
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] * * *

* * *Параметр 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 * * *
VAR FLOAT *visTexAniFPS; * * * * * * * * * * * * * * * * *0.5
VAR INT * *visTexAniIsLooping; BOOL * * *
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 * * *
VAR STRING *timeStartEnd_S; * * * * * * * * * * *"11 16"
VAR INT * * m_bIsAmbientPFX; BOOL * * *

* * Параметры визуализации траектории частиц trlTexture_S, trlFadeSpeed и trlWidth задают соответственно файл текстуры следа траектории, скорость угасания следа и ширину следа от частиц.
* * Параметры следов столкновения с поверхностью mrkTexture_S, mrkFadeSpeed и mrkSize задают соответственно файл текстуры оставленного следа на поверхности, скорость угасания следа и размер следа от частиц. Следы имеют форму четырехсторонних полигонов.
* * Параметр useEmittersFOR включает вычисление положения каждой частицы в месте излучения внутри локального фрейма. В комбинации с flyCollDet_B значительно уменьшает быстродействие.
* * Параметр timeStartEnd_S задает временной промежуток, в котором PFX выполняется (в примере с 11 до 16 часов).
* * Параметр m_bIsAmbientPFX указывает, что этот PFX может быть окружающим, т.е. с его помощью строятся погодные эффекты и он может быть отключен через Gothic.ini (параметр [ENGINE]/noAmbientPFX).

® *vam

Ответить с цитированием