NiParticleSystemController - notes
Обращайте внимание, что время завершения у всех контроллеров в сцене, должно быть равным!
Иначе это может приводить к разного рода ошибкам в анимациях у тех контроллеров Stop Time которых меньше!
Stop Time должен быть одинаков!
Крайне важно учитывать время жизни частиц при использовании Flipp контроллера!
Если кол-во текстур и время его работы превышают время их жизни, это приведет к ошибкам.
Например; текстуры будут "дергаться".
Оптимально, подобрать равное время для жизни частиц и работы контроллера.
Примечание.
(к Frequency, Phase, Start Time, Stop Time)
Если у частиц эти значения большие, либо в ниф файле есть дополнительный контроллер анимации превышающий время работы частиц, то, частицы будут «зависать».
Например, взрыв магии не исчезнет, пока не проиграется вся анимация в файле!
И частицы, с малым временем анимации и цикличностью оной, будут проигрываться все это время.
Многочисленные, повторные, взрывы, создадут целый «сад эффектов», который, увы, отрицательно скажется на фпс.
Однако, в теории это позволяет создавать плавно "гаснущие" взрывы и иные эффекты.
Вероятно, этого можно достичь использованием Альфа- контроллера, либо контроллера невидимости.
«зависшие» частицы с длинной анимацией.
Конечно забавно наблюдать такие хороводы, но фпс они просаживали весьма сильно.
т. е. объекты не исчезали, пока полностью не проигрывалась вся имеющаяся в файле анимация.
На скриншоте, магические взрывы огня и молнии.
Поправка!
Если установить следующие значения:
Start Time 0
Stop Time 25
Emit Start 1
Emit Stop 3
Life Time 20
Speed 5
То можно получить медленно исчезающие взрывы без сложностей с дополнительными контроллерами в файле.
За счет низкой скорости, длинного времени жизни и значительного общего времени, частицы смогут не спеша отработать свою анимацию.
Особенно хорошо получаются магические взрывы холода.
Ледяная дымка медленно рассеивается на месте попадания фростболта.
Примечание.
(к Vertical Direction, Vertical Angle, Horizontal Direction, Horizontal Angle)
это векторы направления разлета и рассеивания частиц.
Вертикаль и горизонталь.
Комбинируя значения можно получать сферы, кольца, столбы, веера, или просто некоторую рассеянность в окончании потока.
Сфера.
Vertical Direction 0
Vertical Angle 3.1416
Horizontal Direction 0
Horizontal Angle 3.1416
Круг (в горизонтальной плоскости).
Vertical Direction 1.5708
Vertical Angle 0
Horizontal Direction 0
Horizontal Angle 3.1416
Круг (в вертикальной плоскости).
Vertical Direction 3.1416
Vertical Angle 3.1416
Horizontal Direction 0
Horizontal Angle 0
Веер.
Vertical Direction 0
Vertical Angle 1.5708
Horizontal Direction 0
Horizontal Angle 0
Примечание.
(к Vertical Direction, Vertical Angle, Horizontal Direction, Horizontal Angle)
В основном актуальны для частиц работающих из одной точки, но также это будет работать и для массивов частиц.
Т.е. если активен раздел Start Random.
Примечание.
(к Emit Start Time)
Важно!
— Это не начало анимации, это начало появления частиц на свет.
Для постоянного ровного «потока» значение хорошо ставить в минус. Т.е. до нулевого фрейма!
-1.3333 например.
Для светильников, это значение не должно быть большим! Лучше для фпс.
Т.е. за большее время появляется большее кол-во частиц.
Также, в некоторых случаях, здесь можно задать синхронизацию частиц с анимацией объекта.
Например указав время, равное началу некоторой группы анимации.
Впрочем, надежнее использовать контроллеры невидимости.
См. ванильного мелкого ходячего трупа, который выстреливает потоком частиц в конце анимации нокаута.
Примечание.
(к Emit Stop Time)
— время завершения явления частиц. Для светильников не должно быть большим.
Оптимально -1.3333 Start и 1.3333 Stop.
Либо иное ровное значение, например: -3.3333 и 3.3333, но чем дольше, тем больше будет частиц, а это скажется на фпс.
Также Stop Time (в общем разделе) должна равняться этому значению.
Иначе, будет возникать пауза, между концом и началом цикла жизни частиц.
Наиболее правильная конструкция это:
Start Time = Emit Start Time
Stop Time = Emit Stop Time
Примечание.
(к Emit Rate )
— плотность частиц.
Чем больше значения тем сильнее поток.
Т.е. большее кол-во частиц отображается в кадре.
Число частиц берется из параметров:
Num Particles в NiParticleSystemController
и, Num Vertices, Num Particles в NiParticlesData.
Однако, встречались модели с пустыми значениями Num Particles.
Примечание.
(к Lifetime )
— важный параметр! Сколько частица будет отображаться, прежде чем исчезнет.
В сочетании со скоростью это и создает потоки частиц в игре.
Чем дольше "жизнь", тем дальше частица успевает улететь.
Слишком большие значения жизни приводят к отрицательным результатам и зависанию частиц в «неестественных» позициях.
Впрочем, в ряде случаев это позволяет оставлять за существом длинный шлейф, либо медленно гаснущие облачка пара.
См. паровых центурионов в Симфонии, или Морозных атронахов.
Примечание.
(к Trailer )
В ниф файле может быть несколько источников частиц.
Как с Trailer = 0, так и Trailer = 1.
Что позволяет получать интересные результаты.
Те частицы которые используют трейлинг следует упаковать в NiBSParticleNode.
Либо, сразу, преобразовать корень файла в этот тип ноды.
Примечание.
- если частицам типа Array или Cloud задан вектор движения не Random, то управляется это в Vertical Direction.
т.е. указывается только один вектор движения.
если Random то Horizontal Angle будет кратно 3х и пр.
Т.е. область распространения частиц получает дополнительные векторы через этот раздел.
Примечание.
Как видно, SSG не показывает ничего интересного, ни в игровой версии ни в редакторе.
Обычный контроллер времени с двумя дополнительными строками.
Ссылка на эмиттер.
И режим создания "хвоста" за частицами.
Dynamic Bound.
Который, всегда = true в не зависимости от флага Trailer в ниф файле.
Примечание.
rotouns писал.
another thing about negative -1.000 ... 1.000 and the relation between ...Data and Controller:
active particles in Data are usually placed when the first rendering happens because it would look strange without them when you enter a cell or load a saved game: fires would not exist in the first frame and just start being emitted from nothing -
the Controller also uses the number of particles in Data and when all particles exist it will wait until their lifetime expires before emitting new particles -
so if first render time is 0, and Controller ends at 1.000 and loops back to -1.000... that would mean the particles in Data represent the state of the "effect" in the middle of its loop,
but if the controller ends at 2.000 and loops back to 0.000 then the particles in Data represent the state of the "effect" at the end of the loop... depending on the lifetime of the particles and maximum number of them, this could look different -
in most of the Data nodes I see, the particles have vertices and size, but their current lifetime is not in Data, it's in the Controller.
So, maybe it is good for loops if the Data particles are a picture of the effect in the middle of its loop instead of the end,
but maybe it would be the same with different lifetime of the particles in the Controller.
If You need a loop: Start Time&Emit Start Time need be same and in negative range. -0.
Stop Time&Emit Stop Time need be same and in positive range.
+0 Lifetime need be a sum of these values.
-0,750 +0.750=1.5 time of life of particles.
Also the speed shouldn't be very big.
|
|
Влияние рассеяния на частицы в облаке.
|
|
|
|
|
|
|
|
|
|