Правка для Nif.xml файла, устанавливает правильные отношения нод.
Т.е. NiBSParticleNode подкласс
анимационной ноды, а не обычной, как это значится по умолчанию.
<niobject name="NiBSParticleNode" abstract="0" inherit="NiBSAnimationNode">
Bethesda-specific extension of Node!
</niobject>
Отмечено!
Можно использовать вместо анимированной ноды!
Т.е. переименовав ноду в NiBSParticleNode.
Частицы и все прочие анимированные объекты будут работать!
Но важно соблюдать флаги! 32, 42, или 170 для сохранения частицами возможности оставлять хвост.
При этом, если родительская для частиц нода была NiBSAnimationNode содержа в себе вложенные NiBSParticleNode и частицы в них не работали. Т.е. анимация оных не проигрывалась.
То после переименования вложенных NiBSParticleNode с частицами в niNode, а их родительской ноды из NiBSAnimationNode в NiBSParticleNode, все заработало. И частицы и прочие анимированные объекты.
Также!
После переименования вложенных нод из NiBSParticleNode в niNode, а корня файла в NiBSAnimationNode, работоспособность частиц и анимированных объектов - сохранилась.
Т.е. можно использовать NiBSAnimationNode вместо NiBSParticleNode .
Примечание.
Но, NiBSParticleNode не следует использовать в качестве корня файла!
В ряде случаев, это делает объект не выбираемым в редакторе!
Т.е. объект можно будет выделить, но не передвинуть.
Курсор не принимает вид перекрестья.
Возможно это связано с флагами.
Если модель не возможно передвинуть и в ней есть все необходимые шейпы и пр, то переименуйте корень в NiBSAnimationNode.
Либо в обычную NiNode.
Примечание.
По видимости, использование этой ноды оправдано в основном в переносных светильниках (факелах и пр.)
Где она поддерживает плавный поток частиц, без возврата к началу их генерации при смене групп анимаций Игрока, или НПС.
Т.е. если частицы находятся в обычной ноде, или в анимированной, то при смене анимационных групп несущего факел персонажа - поток частиц сделает резкий рывок к началу. При этом, ранее появившиеся частицы резко исчезнут.
Вероятно для избежания этой оказии и была создана NiBSParticleNode.
Примечание.
Как показали дальнейшие изыскания, это системное имя и необходимо для самой возможности частиц оставлять след.
Т.е. если частицы находятся в этой ноде и имеют в своем контроллере значение Trailer = 1, то:
- они будут создавать шлейф.
Если частицы находятся в обычной ноде и имеют в своем контроллере значение Trailer = 1, то:
- не будут создавать шлейф.
Если частицы находятся в обычной ноде, или в NiBSParticleNode, и имеют в своем контроллере значение Trailer = 0, то:
- не будут создавать шлейф.
Примечание.
Из 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.
|
Phase =
|
Пауза при обновлении состояния анимации )вероятно(.
Актуально только для редактора.
Если = 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.
Актуально для подвижных светильников.
Либо для частиц на существах.
|
|
|
|
|
|
2
|
10
|
32
|
42
|
64
|
|
|
|
|
|
74
|
96
|
128
|
130
|
132
|
|
|
|
|
|
138
|
172
|
202
|
212
|
224
|
170 отличается от 172 методом детектирования колизий (TRI vs OBS), т.е. в плане анимации частиц нет разницы и флаги можно использовать с одинаковым успехом.
138 флаг работает в факелах и моделях существ за счет получения анимации из KF файлов оных.
И, сам по себе, не пригоден для использования в статичных светильниках!
По видимости, это нельзя обойти даже с использованием Анимационной ноды в качестве корня файла!
Т.е. в стационарных светильниках нельзя использовать флаги со значением:
Animated = false
Примечание.
Строка 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 привел к нормализации флагов и восстановлению анимаций.
Примечание.
Обращайте внимание!
Нода в которой находятся частицы, как правило, не включает в себя их Эмиттер!
Т.е. при экспорте из МАХа эмиттер всегда помещается в другую группу.
И как кажется, это может быть, необходимо для правильной работы анимации частиц.
Т.к. при смещение позиции эмиттера, частицы используют данные об исходной позиции, что приводит к эффекту смещения и возникновению шлейфа, т.е. частицы работают динамично.
См. например факелы в игре.
Но, также следует учитывать наличия флага Trailer в контроллере частиц и имя ноды.
Примечание.
В файлах существ, возможно использовать оба варианта.
Например:
- для частиц требующих постоянное движение вокруг существа, без рывков и в независимости от основной анимации, лучше будет использовать 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