NiBSParticleNode примечания
Правка для Nif.xml файла, устанавливает правильные отношения нод.
Т.е. NiBSParticleNode подкласс анимационной ноды, а не обычной, как это значится по умолчанию.
<niobject name="NiBSParticleNode" abstract="0" inherit="NiBSAnimationNode">
Bethesda-specific extension of Node!
</niobject>
Это не так чтобы нужно, или обязательно, просто отмечаем.
Важно!
NiBSParticleNode используется в файлах светильников в т.ч. для правильной работы параметра Off by default.
Т.е. когда светильник выложен в мир, частицы в нем не отображаются, ака пламя погашено.
Если переименовать ноду частиц в обычную niNode, то частицы появятся на своем месте!
Но, не будут иметь анимации! Будет видно застывшее пламя.
Т.е. эта нода, в т.ч. отвечает за правильное отключение отображения частиц в погашенном состоянии.
Хотя само по себе, Off by default, влияет на состояние контроллера анимации частиц, включая оный, или выключая.
Но на правильность отображения частиц, в выключенном состоянии, влияет именно эта нода.
Отмечено!
Можно использовать вместо анимированной ноды!
Т.е. переименовав ноду в NiBSParticleNode.
Частицы и все прочие анимированные объекты будут работать!
Но важно соблюдать флаги! 32, 42, или 170 для сохранения частицами возможности оставлять хвост.
При этом, если родительская для частиц нода была NiBSAnimationNode содержа в себе вложенные NiBSParticleNode и частицы в них не работали. Т.е. анимация оных не проигрывалась.
То после переименования вложенных NiBSParticleNode с частицами в niNode, а их родительской ноды из NiBSAnimationNode в NiBSParticleNode, все заработало. И частицы и прочие анимированные объекты.
Также!
После переименования вложенных нод из NiBSParticleNode в niNode, а корня файла в NiBSAnimationNode, работоспособность частиц и анимированных объектов - сохранилась.
Т.е. можно использовать NiBSAnimationNode вместо NiBSParticleNode .
Примечание.
Но, NiBSParticleNode не следует использовать в качестве корня файла!
В ряде случаев, это делает объект не выбираемым в редакторе!
Т.е. объект можно будет выделить, но не передвинуть.
Курсор не принимает вид перекрестья.
Возможно это связано с флагами.
Если модель не возможно передвинуть и в ней есть все необходимые шейпы и пр, то переименуйте корень в NiBSAnimationNode.
Либо в обычную NiNode.
Примечание.
Если корень файла NiBSParticleNode и флаг 42 128 шейпы могут перестать отображаться.
Верно для стрел, при положении в луке, стрела не отображалась.
172 флаг все отображается корректно.
т.е. бспноду в качестве корня использовать с осторожностью.
Впрочем, см. здесь подробнее.
Примечание.
По видимости, использование этой ноды оправдано в основном в переносных светильниках (факелах и пр.)
Где она поддерживает плавный поток частиц, без возврата к началу их генерации при смене групп анимаций Игрока, или НПС.
Т.е. если частицы находятся в обычной ноде, или в анимированной, то при смене анимационных групп несущего факел персонажа - поток частиц сделает резкий рывок к началу. При этом, ранее появившиеся частицы резко исчезнут.
Вероятно для избежания этой оказии и была создана NiBSParticleNode.
Примечание.
Как показали дальнейшие изыскания, это системное имя и необходимо для самой возможности частиц оставлять след.
Т.е. если частицы находятся в этой ноде и имеют в своем контроллере значение Trailer = 1, то:
- они будут создавать шлейф.
Если частицы находятся в обычной ноде и имеют в своем контроллере значение Trailer = 1, то:
- не будут создавать шлейф.
Если частицы находятся в обычной ноде, или в NiBSParticleNode, и имеют в своем контроллере значение Trailer = 0, то:
- не будут создавать шлейф.
Примечание.
Для отключения шлейфа частицам магических эффектов достаточно NiBSParticleNode превратить в обычную ниноду.
Т.е. просто сменить тип на niNode.
Настройки контроллера и флаг самой ноды, при этом, изменять не нужно.
Такое бывает полезным для отлаживания, когда нет желания углубляться во всякие тонкие настройки.
Примечание.
Из 3д МАХ через ТесЭкспортер можно получить только 138 флаг на этой ноде.
Отвечает за включение хвоста за частицам.
Также можно получить 10ый флаг, но со значением Trailer = 0 в настройках контроллера.
74 = not random, аналог 106го флага для анимационной ноды. follow = 0.
202 = not random, follow = 0.
Остальные флаги можно установить только в нифскопе.
Примечание.
За добавлением еще одного параметра, а именно Follow.
Который воздействует на частицы согласно установленному на ноде флагу.
Animated =
|
состояние анимации.
Если True объект будет проигрывать ее постоянно.
Если False не будет! Однако в файлах существ и активаторов с Kf файлами, это игнорируется.
Т.е. анимация объекта идет отдельной командой.
|
NotRandom =
|
Состояние случайного старта.
Если False, все копии объекта в сцене будут проигрывать анимацию случайным образом.
Т.е. с поправкой ко времени старта, что привносит разнообразие в состояние положения объектов.
Если True все копии будут работать синхронно!
|
FirstTime =
|
Возможно это случайная поправка ко времени старта анимации.
Управляется только движком.
Флаги ни что-то иное, не показали возможности прямого влияния.
Greatness7
the first time thing is probably related to the randomization feature
it is automatic
when the mesh is rendered it checks the flag. if its the first time then it randomizes the phase stuff, if its not first time it leaves it alone
you can't set this flag in the actual nif file, it only exists ingame
|
Managed =
|
Управляется движком.
Всегда False в редакторе.
В этом случае анимации не будет от слова совсем.
|
Displayed =
|
Видимость объекта.
Если False объект скрыт.
|
Always Update =
|
Обновление анимации вне поля зрения камеры.
Либо каждый фрейм идет проверка на состояние анимации(?).
Иначе False.
|
|
Пауза при обновлении состояния анимации )вероятно(.
Актуально, в основном, только для редактора.
Если = 0, частицы могут перестать отображаться.
Greatness7
PhaseInit is global value, not part of any particular nif
the game calculates a random value for it on the first load and that gets assigned to all controllers under the NiBSAnimationNode
some details here https://gitlab.com/OpenMW/openmw/-/issues/6455
|
bFollow =
|
Создание шлейфа при движении.
Если True.
Актуально для подвижных светильников.
Либо для частиц на существах.
Этим значением как раз и управляет NiBSParticleNode посредством своего флага!
|
|
|
|
|
|
2
|
10
|
32
|
42
|
64
|
|
|
|
|
|
74
|
96
|
128
|
130
|
132
|
|
|
|
|
|
138
|
172
|
202
|
212
|
224
|
170 отличается от 172 только методом детектирования колизий (TRI vs OBS).
Т.е. в плане анимации частиц, нет разницы и флаги можно использовать с одинаковым успехом.
138 флаг работает в факелах и моделях существ за счет получения анимации из KF файлов оных.
И, сам по себе, не пригоден для использования в статичных светильниках!
По видимости, это нельзя обойти даже с использованием Анимационной ноды в качестве корня файла!
Т.е. в стационарных светильниках нельзя использовать флаги со значением:
Animated = false
Примечание.
Greatness7
it shouldnt matter, flag 170 is 2+8+32+128
2 and 8 are irrelevent ignored by the loader. 32 is Animate and 128 is Follow
follow flag i think is also not implemented in openmw currently (2024)
If you use flag 32 it makes animations play even without a .kf.
It makes their timing independent of any attached KF manager too.
Which can be useful if you want the animation to loop irrespective of PlayGroup jumping between timings.
Примечание.
Строка AlwaysUpdate = true верна в случае наличия NiKeyframeController, или NiVisController на этой ноде.
Flag может быть, как 8, так и 12, а для NiVisController 0.
Т.е. наличие, того, или этого контроллера, именно на самой ноде, приводит к активации параметра " AlwaysUpdate = true".
Во всех остальных случаях, этот параметр =false.
Флаг самой ноды, никак не это не влияет.
AlwaysUpdate, по идее, отвечает за активность анимации объектов вне поля зрения камеры (за кадром).
И баг зависающих при кончине частиц, может быть связан как раз с этим значением.
Т.е. частицы включают анимацию, только когда они в кадре!
За спиной игрока они застывают в том положении в котором были застигнуты этим событием...
Но если AlwaysUpdate = true, они (должны, могут?) продолжать движение вне зависимости от состояния рендеринга!
Т.е. даже за спиной игрока.
Что могло бы решить проблему с их зависанием.
Были проведены тесты, но результаты были не стабильны.
На данный момент, можно с осторожностью, рекомендовать добавление на эту ноду неактивного NiVisController.
Т.е. с флагом анимации 0.
По крайней мере, это дает шанс на правильное исчезновение частиц (например над останками Спящих) вне поля зрения игрока!
Примечание.
Отмечалось, что флаг 128 хорошо проявляет себя в файлах существ.
В т.ч. блокируя изменение масштаба частиц, до перезагрузки игры.
Обращайте внимание, что сам по себе этот флаг отключает анимацию!
Но в файлах существ и активаторов, использующих КФ файл, анимации будет работать.
Примечание.
NiBSParticleNode эффективно используется в магических снарядах!
См. VFX_ объекты редактора в разделе Weapon.
Т.е. переименование NiBSParticleNode в обычную NiNode (в таких файлах) приводило к нарушению размера частиц.
Поэтому, переименование NiBSParticleNode, может быть, полезным только в моделях активаторов, или статиков.
Но, для "подвижных" объектов (т.е. магических снарядов), это может иметь негативный эффект.
Примечание.
Частицы прекрасно могут работать внутри обычной niNode!
Т.е. если переименовать NiBSParticleNode в niNode, частицы продолжат работать.
Правда уже без создания шлейфа(С)
А в ряде случаев, наблюдается даже улучшение их поведения!
Т.е. модель которая упорно не хотела показывать свои частицы в редакторе и в игре, после изменения типа ноды;
- с NiBSParticleNode на niNode, начала работать нормально.
При этом ничего кроме типа ноды изменено не было!
Примечание.
Возможно было связано с конфликтом именных нод.
Когда корень файла был NiBSAnimationNode, а вложенные ноды - NiBSParticleNode, флаги конфликтовали между собой.
Это и приводило к зависанию анимаций.
Т.е. отказ от использования вложенных NiBSParticleNode привел к нормализации флагов и восстановлению анимаций.
Примечание.
Обращайте внимание!
Нода в которой находятся частицы, как правило, не включает в себя их Эмиттер!
Т.е. при экспорте из МАХа эмиттер всегда помещается в другую группу.
И как кажется, это может быть, необходимо для правильной работы анимации частиц.
Т.к. при смещение позиции эмиттера, частицы используют данные об исходной позиции, что приводит к эффекту смещения и возникновению шлейфа, т.е. частицы работают динамично.
См. например факелы в игре.
Примечание.
В файлах существ, возможно использовать оба варианта.
Например:
- для частиц требующих постоянное движение вокруг существа, без рывков и в независимости от основной анимации, лучше будет использовать NiBSParticleNode.
- для частиц используемых в определенный момент и зависящих от конкретной анимации, можно попробовать провести конвертацию из NiBSParticleNode в обычную Ноду.
Примечание.
Если эмиттер частиц упаковать в NiBSParticleNode , это позволит открыть целый пласт новых возможностей!
Спасибо уважаемому Kurpulio за отмеченную возможность!
Это позволит частицам делать задержку от момент появления, до момент движения объекта.
Т.е. если Игрок скастовал заклинание, оно появится в его текущих координатах и так останется на этом месте некоторое время, а затем "броситься" догонять игрока!
См. ролики в приложении к заметкам:
@_Notes_for_Modmaking\Additional_Files\Tours\@How_To\NiParticle\PIC_only\PIC_ALLATONCE
Примечание.
Из переписки на одном форуме о флагах на этой ноде:
rotouns
@Greatness7 do you know what flags 128 is for particlenodes?
it's what I'm using to make particles that inherit keys from parents actually work in creatures,
also for particles that don't inherit (flame or frost atronach body particles)
it fixes a bug with missing particles when you place one of these creatures by scrip
Greatness7
128 = Attach (Particles) thats all i have
rotouns
so far it seems to be good to add for all creature particles that don't have it
I'ma fix all those creatures that have particles that never showed
Greatness7
iirc you set it when you want particle to attach to the parent
rotouns
the first time I discovered that dremoras were supposed to go out in smoke was by making one an activator and testing in openmw :sweat:
Greatness7
but unset it if you ant to leave behind stuff, like smoke on torches
rotouns
without that flag they just don't appear at all for creatures tho
Greatness7
?\_(?)_/?
rotouns
unless they have 32 that is
but then they don't appear until reload when placed by script