|
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
|