PG Cold War - официальный форум

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: Pheonix 
Форум » Игры серии "В тылу врага" » Академия ВТВ » FX (Как устроен файл описания спецэфекта.)
FX
TimoshДата: Понедельник, 24.07.2017, 20:38 | Сообщение # 1
Генералиссимус
Группа: Разработчик
Сообщений: 3920
Репутация: 231 []
Статус: Offline
FX-файл состоит из блоков нескольких основных типов: lightview, spriteview, particleview, entitygenerator. Все блоки действуют параллельно и независимо, если имеют в своем составе delay - начинаются по такой задержке.

I. lightview - источник света. Вспышка при выстреле орудия, осветительная мина, достаточно сильный взрыв, фонарь содержат такой элемент. Интересно, что эффект включенной фары его не содержит, для освещения дороги используется отдельный lightview, один на юнит. Иначе тормозит. А конус света из фары - просто спрайт (см. ниже).
type - тип источника. point - точечный (взрыв, фонарь), spot - конус с (вероятно) горизонтальным углом раствора theta и вертикальным phi. Разные attenuation связаны с затуханием (вероятно, по разным относительным координатам), а radius определяет масштаб. falloff может означать отклонение вниз от оси х (чтобы светил на землю, а не горизонтально), тут не знаю. effectonground означает, очевидно, допустимость подсветки земли.
animator см в разделе спрайтов, смысл тот же - изменение со временем.

II. spriteview - привязанный к руту эффекта спрайт. Отображается всегда в строгой зависимости от рута эффекта, подходит для анимированных текстур (пламя из дула) либо для таких спрайтов, которые всегда должны смотреть на камеру игрока (скажем, гало вспышки). Типичный пример гало:
{#+ spriteview flash ;#+ не знаю что, затем тип блока и его название. 
;Название произвольное, но уникальное в пределах файла.
{sprite "$/flash/flash_g03" ;используемая текстура, допустима динамическая, вроде гифки
{timer ;настройки таймера для этого блока
{mode } ;loop - зациклить, play (или ничего, вероятно) - один раз
{duration 0.145 0.025} ;длительность: первая цифра +- вторая цифра. 
;При установке -1 проигрывается бесконечно
}
{preturn 90 90} ;Спрайт всегда повернут на 90 градусов по отношению к камере, поэтому круглое
;гало на текстуре не будет искажено при кручении камеры. Даже на паузе.
{highlight 0xffffec85} ;подсветка данным цветом
{scale 1 ;Блок масштаба. В заглавии блока - общий коэффициент масштабирования.
{linear ;тип масштабирования.
;linear - линейный от min к max
;peak - плавно от min к max и затем снова до min
;npower -  от min к max но не линейно, а по степенной зависимости со степенью pow
{min 0.2}
{max 2.5}
}
}
{visibility 1 ;Динамика прозрачности спрайта. То же, что и для scale
{peak
{min 0}
{max 0.5}
}
}
{light 1 ;Это источник света, но не отображающийся на ландшафте, а только светящий в камеру.
{linear
{min 1}
{max 0}
}
}
}
{halo} ;???
{notifyowner} ;???
{autovisible} ;??? Вероятно, видно при линковке эффекта и не требует дальнейшего включения через inc.
{orientation normalXY} ;ориентирован иксом по иксу, игреком по игреку кости юнита.
{orientation normalXZ} ;ориентирован иксом по иксу, игреком по зеду кости юнита.
;два таких одинаковых спрайта крест-накрест дают отличное пламя из дула. 
;Противоречит вышеуказанному preturn 
}

III. particleview - генератор спрайтов. В соответствии с определенными законами разбрасывает уже изученные нами спрайты.

{#+ particleview ;если генератор один - можно без имени, но лучше всегда писать.
{generator
{totalparticles 10} ;общее число частиц (если конечное), или что-то вроде интенсивности, если бесконечное.
{emissionarea ;Область появления частиц
{radius 0.2 0.2} ;характерный размер, +-
{distributionlaw sphere} ;Форма зоны спавна. Может быть сфера или disk, а вот как если без этой строчки - не знаю точно.
{alpha0 0} ;Горизонтальный и вертикальный углы конуса начальных векторов скорости. 
;Т. е. здесь задаем возможные направления (можно с +-)
{alpha1 180}
{speed 0.02} ;а здесь - модуль скорости. тоже с +-
}
{particleinit
{speed 0} ;Это - скорость появления частиц. Подбором...
{lifetime 2} ;Сколько секунд живет каждая частица.
}
{timetolive 1.5 0.2} ;Если этот параметр есть, то он показывает, сколько работает весь генератор.
{axisz} ;Означает, что alpha0, alpha1, speed идут относитьельно оси z, а не х.
}
{offset 0 0 20} ;Частицы генерируются со смещением на 20 по оси z. 
;Увы, координаты общемировые, и первые две цифры для нас бесполезны.
{mover ;Как частица движется после рождения
{damping 0.95} ;Сила трения о воздух
{nodependonwind} ;не реагирует на ветер
{gravity
{value -0.005} ;имеет персональный антигравитатор smile
}
{collisions ;с чем сталкивается
{terrain} ;с землей
{objects} ;с объектами
{restitution 0.2} ;видимо, как отскакивает?
}
}
А дальше идет составной visualizer. Смысл его в том, что сначала-то генерируется один из трех видов спрайтов (случайно), а после столкновения или истечения времени жизни (stage collided dying) он меняет свою текстуру на другую

{visualizer
{stage initial 
{sprite "$/particle/trava"
{turn 1
{npower
{min 10 10}
{max 90 20}
{pow 1.5}
}
}
{timer
{mode play }
{duration -1}
}
{scale 0.15 0.05}
{preturn 90 90}
}
{sprite "$/particle/hay2"
{turn 1
{npower
{min 10 10}
{max 90 20}
{pow 1.4}
}
}
{timer
{mode play }
{duration -1}
}
{scale 0.2 0.1}
{preturn 60 60}
}
{sprite "$/particle/hay1"
{turn 1
{npower
{min 10 10}
{max 90 20}
{pow 1.5}
}
}
{timer
{mode play }
{duration -1}
}
{scale 0.2 0.1}
{preturn 100 50}
}
}
{stage collided dying 
{sprite "$/particle/trava"
{scale 0.2 0.1}
{turn 90 60}
{timer
{mode play }
{duration 1.6 0.7}
}
}
{sprite "$/particle/hay2"
{scale 0.2 0.1}
{turn 90 60}
{timer
{mode play }
{duration 1.7 0.8}
}
}
{sprite "$/particle/hay1"
{scale 0.2 0.1}
{turn 90 60}
{timer
{mode play }
{duration 1.7 0.8}
}
}
{flags killparticle ground }
}
}
{notifyowner}
}

IV. entitygenerator вообще-то разновидность particleview, но необычная. Вместо блока {visualizer у него указывается entity, которая и спавнится с указанными начальными скоростями.

{#+ particleview "parts 1"
{delay 0.2}
{entitygenerator
{totalparticles 3}
{axisz}
{emissionarea
{radius 16}
{alpha0 0}
{alpha1 22.5 22.5}
}
{particleinit
{speed 11.5 3.5}
{lifetime 5.5 0.5}
}
{entity "#metall1"
{fx "smoke_black_small"}
}
{entity "#metall3"
{fx "smoke_barrel_small"}
}
{entity "#metall2"
{fx "smoke_barrel_small"}
}
}
}
 
Форум » Игры серии "В тылу врага" » Академия ВТВ » FX (Как устроен файл описания спецэфекта.)
Страница 1 из 11
Поиск:

Топ пользователей