Nif.Xml
Файл настроек Нифскопа содержащие записи о типах объектов.
Допускает создание, новых и редактирование уже имеющихся записей.
Что открывает ряд новых возможностей по работе с моделями!
К сожалению, все эти годы (до 2020го), этому файлу уделялось крайне малое внимание...
Меж тем, список известных нифскопу объектов задается именно здесь!
Что, позволяет сделать не только исправление и добавления, но и... перевод описаний параметров?
Что, позволяет сделать не только исправление и добавления, но и... перевод описаний параметров?
Впрочем было отмечено, что существует некоторые названия которые нельзя изменять!
Изменение может приводить к потере работоспособности объекта.
Изменение может приводить к потере работоспособности объекта.
Надо полагать, что это поправимо, разве что, придется поправить исходный код, благо он доступен в оп-сорсе.
Впрочем, эта статья лишь, простое уточнение о наличии в архиве заметок исправленного файла.
А также, некоторые примечания, о том, что было изменено (для истории).
- обновлено NiSkinPartition
- значительно обновлено и расширено описание работы Боундинг Бокса. Это опциональные правки и не рекомендуются к внесению на постоянных началах!
Примечание.
Отдельные исправленные, или добавленные, настройки объектов, можно найти в их разделах.
Все обновленные, или добавленные объекты, получили отдельный параграф в заметках, для удобства поиска и исправлений.
Полная версия Nif.xml файла находится здесь:
@_Notes_for_Modmaking\Additional_Files\Nifskope\Nifskope_(XML_file_Only)(for_1.1._1.2versions)
Версия под Нифскоп 1.1.3, но подойдет и для 1.2а.
Не забудьте сделать резервную копию!
Файл содержит еще ряд исправлений названий, которые здесь не был указаны, по причине значительного объема таких правок.
Но всегда можно использовать утилиты для сравнения двух файлов и посмотреть, чем этот файл отличается от исходного.
Большинство дополнений и измененных разделов перенесено в конец файла, что, хоть как-то, должно упростить поиск основного массива изменений.
Примечание.
Как дополнительный вариант, можно заменить Nif.xml файл, на специальный билд оного - содержащий записи подходящие только для МВ.
Как дополнительный вариант, можно заменить Nif.xml файл, на специальный билд оного - содержащий записи подходящие только для МВ.
См. здесь.
@_Notes_for_Modmaking\Additional_Files\Nif_xml
Это оптимизированный Nif.xml файл предотвращающий случайное добавление не известного для МВ объекта.
А также, несколько ускоряющий работу Нифскопа.
Версии для Нифскопа 2.0 и 1.1.3 (1.2)
Удалено все лишнее!
Однако!
Эта версия не позволит открыть ниф файлы от других игр, т.к. нужные для этого записи удалены!
Однако!
Эта версия не позволит открыть ниф файлы от других игр, т.к. нужные для этого записи удалены!
Используйте замену только если знаете, что делаете.
Впрочем, никто не мешает использовать несколько копий Нифскопа.
В т.ч. портейбл.
Примечание.
Если изменить запись abstract="1", на abstract="0" появится возможность преобразования объектов в больших приделах!
Т.е. быстро сменить тип объекта на базовый и затем преобразовать, базовый тип в другой объект.
Это возможность, следует использовать с осторожностью!
Но в некоторых случаях, такое действие может оказаться удобным.
Для быстрого теста (этой возможности), в любом текстовом редакторе выполнить "найти и заменить" по всему тексту:
"abstract="1" -> abstract="0"
В этом меню будет много больше опций, чем было прежде.
Но неправильная конверсия приведет к ошибкам!
Делайте это только если уверены и понимаете, что вы делаете!
Делайте это только если уверены и понимаете, что вы делаете!
Примечание.
Если объект имеет значение abstract="1", то ниф файл содержащий этот объект не может быть открыт корректно.
Т.е. если обозначить (например) NiBsAnimationManager как abstract="1", модель будет открыта с ошибками.
Но если обозначить abstract="0", откроется корректно.
Однако, некоторые объекты не полезно создавать в ниф файлах, тот же NiBsAnimationManager.
Другие объекты являются абстрактными над классами и должны иметь значения abstract="1", т.к. их "физическое" добавление не предполагается в принципе. Т.к. приводит к вылетам игры редактора.
Следует это учитывать при редактировании файла и внесение в него правок.
Если объект не планируется добавлять в ниф файлы и нет необходимости открывать файлы его содержащие, то можно переводить значение из 0 в 1. Это уберет такие объекты из контекстного меню Convert нифскопа и предохранит от случайного добавления, через меню Insert. Выглядит так, что ряд объектов будет полезно перевести в abstract="1"!
NiBone, NiBsAnimationManager и пр.
Таким образом можно сократить кол-во опций для добавления и конверсии только известными и рабочими в МВ типами объектов, убрав все от старших игр и не нужное для использования в МВ.
Впрочем, будет лучше иметь две версии Nif.xml файла, одна только для работы с МВ.
Вторая для открытия всего прочего. Т.е. ниф файлов старших версий.
При желании, параметр abstract="Х" можно вовсе удалить из строк ХМЛ файла.
Примечание.
Как вариант, из Ниф.хмл файла, можно выкинуть вообще все лишнее, что не требуется для ниф файлов 4.0 версии.
Это уберет названия таких объектов из контекстного меню.
Но равно не позволит открыть ниф файлы от старших версий.
Что, конечно, легко решается, другой копией нифскопа, с полной версией ниф.хмл.
(возможно) Полный список правок см. в разделах объектов.
Все правки относятся ТОЛЬКО к ниф файлам 4.0 версии и после их внесения, нифскоп НЕ СМОЖЕТ открывать ниф файлы других версий.
Т.е. это оптимизированные только под МВ правки.
Используйте их только в специальной сборке нифскопа.
NiBone - удалить из ниф хмл!
NiBSAnimationManager лучше не добавлять. Т.е. объект не показывает пользу для использования в ниф файлах.
NiKeyframeManager лучше не добавлять
NiRenderedTexture опционально
NiRendererSpecificProperty опционально
NiScreenPolygon опционально
BrickNiExtraData опционально
BSMirroredNode опционально
TES3ObjectExtraData опционально
NiParticleMeshes лучше не добавлять, т.е. не работает в МВ!
Bounding Box - тестовые правки с возможностью быстрого отката оных.
Разделы пробивать поиском.
Примечание.
" default="4845"> значение после default обозначает предустановку.
Т.е. можно настроить некоторые значения под себя, просто добавив " default="ХХХХ" в желаемую строку.
Значение по дефолту.
|
|
На что заменять.
|
Флаг альфы по умолчанию.
| ||
<add name="Flags" type="Flags" default="237">
|
<=
|
<add name="Flags" type="Flags" default="4845">
|
подклас анимационной ноды, а не обычной.
| ||
<niobject name="NiBSParticleNode" abstract="0" inherit="NiNode">
Bethesda-specific extension of Node!
</niobject>
|
|
<niobject name="NiBSParticleNode" abstract="0" inherit="NiBSAnimationNode">
Bethesda-specific extension of Node!
</niobject>
|
<niobject name="NiParticleBomb" abstract="0" inherit="NiParticleModifier">
A particle modifier.
<add name="Decay?" type="float">Unknown.</add>
<add name="Duration?" type="float">Unknown.</add>
<add name="DeltaV?" type="float">Unknown.</add>
<add name="Start?" type="float">Unknown.</add>
<add name="Decay Type?" type="DecayType">Unknown.</add>
<add name="Symmetry Type?" type="SymmetryType" ver1="4.1.0.12">Unknown.</add>
<add name="Position?" type="Vector3">The position of the mass point relative to the particle system?</add>
<add name="Direction?" type="Vector3">The direction of the applied acceleration?</add>
</niobject>
|
<=
|
<niobject name="NiParticleBomb" abstract="0" inherit="NiParticleModifier">
<add name="Decay" type="float"></add>
<add name="Duration" type="float"></add>
<add name="DeltaV" type="float"></add>
<add name="Start Time" type="float"></add>
<add name="Decay Type" type="DecayType"></add>
<add name="Symmetry Type" type="SymmetryType"></add>
<add name="Position" type="Vector3"></add>
<add name="Direction" type="Vector3"></add>
</niobject>
|
Настройка параметров частиц в более читабильном виде.
Полностью заменить оригинальный блок!
Обратите внимание, переименовывать некоторые строки - нельзя!
Это приведет к графическим ошибкам в отображении поведения частиц, либо вовсе: частицы перестанут отображаться! | ||
|
|
Код с коментариями:
|
<niobject name="NiParticleSystemController" abstract="0" inherit="NiTimeController">
..............
..............
...............
</niobject>
|
<=
|
<niobject name="NiParticleSystemController" abstract="0" inherit="NiTimeController">
<add name="Speed" type="float"></add>
<add name="Speed Variation" type="float"></add>
<add name="Vertical Direction" type="float"></add>
<add name="Vertical Angle" type="float"></add>
<add name="Horizontal Direction" type="float"></add>
<add name="Horizontal Angle" type="float"></add>
<add name="Initial Normal" type="Vector3"></add>
<add name="Initial Color" type="Color4"></add>
<add name="Size" type="float" default="1.0"></add>
<add name="Emit Start Time" type="float"></add>
<add name="Emit Stop Time" type="float"></add>
<add name="Reset Particle System" type="byte"></add>
<add name="Emit (Birth) Rate" type="float"></add>
<add name="Lifetime" type="float"></add>
<add name="Lifetime Variation" type="float"></add>
<add name="Use (Emit) Birth Rate" type="byte"></add>
<add name="Spawn On Death" type="byte"></add>
<add name="Emitter Width" type="float"></add>
<add name="Emitter Height" type="float"></add>
<add name="Emitter Depth" type="float"></add>
<add name="Emitter" type="Ptr" template="NiAVObject"></add>
<add name="Num Spawn Generations" type="ushort"></add>
<add name="Percentage Spawned" type="float"></add>
<add name="Spawn Multiplier" type="ushort"></add>
<add name="Spawned Speed Chaos" type="float"></add>
<add name="Spawned Speed Direction Chaos" type="float"></add>
<add name="Num Particles" type="ushort"></add>
<add name="Num Valid" type="ushort"></add>
<add name="Particles" type="Particle" arr1="Num Particles"></add>
<add name="Emitter Controller" type="Ref" template="NiTimeController"></add>
<add name="Particle Extra" type="Ref" template="NiParticleModifier"></add>
<add name="Particle Colliders" type="Ref" template="NiParticleCollider"></add>
<add name="Trailer" type="byte"></add>
</niobject>
|
NiPlanarCollider в читабильном и оптимизированном виде.
Заменить оригинальный блок. | ||
<niobject name="NiPlanarCollider" abstract="0" inherit="NiParticleModifier">
Unknown.
<add name="Unknown Short" type="ushort" ver1="10.0.1.0">Usually 0?</add>
<add name="Unknown Float 1" type="float">Unknown.</add>
<add name="Unknown Float 2" type="float">Unknown.</add>
<add name="Unknown Short 2" type="ushort" ver1="4.2.2.0" ver2="4.2.2.0">Unknown.</add>
<add name="Unknown Float 3" type="float">Unknown.</add>
<add name="Unknown Float 4" type="float">Unknown.</add>
<add name="Unknown Float 5" type="float">Unknown.</add>
<add name="Unknown Float 6" type="float">Unknown.</add>
<add name="Unknown Float 7" type="float">Unknown.</add>
<add name="Unknown Float 8" type="float">Unknown.</add>
<add name="Unknown Float 9" type="float">Unknown.</add>
<add name="Unknown Float 10" type="float">Unknown.</add>
<add name="Unknown Float 11" type="float">Unknown.</add>
<add name="Unknown Float 12" type="float">Unknown.</add>
<add name="Unknown Float 13" type="float">Unknown.</add>
<add name="Unknown Float 14" type="float">Unknown.</add>
<add name="Unknown Float 15" type="float">Unknown.</add>
<add name="Unknown Float 16" type="float">Unknown.</add>
</niobject>
|
<=
|
<niobject name="NiParticleModifier" abstract="0" inherit="NiObject">
<add name="Next Modifier" type="Ref" template="NiParticleModifier">Next particle modifier.</add>
<add name="Controller" type="Ptr" template="NiParticleSystemController" ver1="4.0.0.2">Points to the particle system controller parent.</add>
</niobject>
<niobject name="NiParticleCollider" abstract="1" inherit="NiParticleModifier">
A particle system modifier.
<add name="Bounce" type="float">strength of reflection for particles</add>
</niobject>
<niobject name="NiPlanarCollider" abstract="0" inherit="NiParticleCollider">
Particle Collider.
<add name="Height" type="float">Unknown.</add>
<add name="Width" type="float">Icon width</add>
<add name="Position" type="Vector3">position.xyz</add>
<add name="X rotation" type="Vector3">rotation1.</add>
<add name="Y rotation" type="Vector3">rotation.2</add>
<add name="Plane" type="NiPlane">Distance of reaction and Normal`s alignment.</add>
</niobject>
|
NiSphericalCollider в читабильном и оптимизированном виде
*удалить старый раздел!
| ||
<niobject name="NiSphericalCollider" abstract="0" inherit="NiParticleModifier">
Unknown.
<add name="Unknown Float 1" type="float">Unknown.</add>
<add name="Unknown Short 1" type="ushort">Unknown.</add>
<add name="Unknown Float 2" type="float">Unknown.</add>
<add name="Unknown Short 2" type="ushort" ver2="4.2.0.2">Unknown.</add>
<add name="Unknown Float 3" type="float" ver1="4.2.1.0">Unknown.</add>
<add name="Unknown Float 4" type="float">Unknown.</add>
<add name="Unknown Float 5" type="float">Unknown.</add>
</niobject>
|
<=
|
<niobject name="NiSphericalCollider" abstract="0" inherit="NiParticleCollider">
Spherical Collider.
<add name="Radius" type="float" />
<add name="Position" type="Vector3" />
</niobject>
|
|
|
Либо использовать такой код.
|
|
|
<niobject name="NiParticleCollider" inherit="NiParticleModifier">
<add name="Bounce" type="float"></add>
</niobject>
<niobject name="NiPlanarCollider" inherit="NiParticleCollider">
<add name="Height" type="float"></add>
<add name="Width" type="float"></add>
<add name="Position" type="Vector3"></add>
<add name="X Axis" type="Vector3"></add>
<add name="Y Axis" type="Vector3"></add>
<add name="Plane" type="NiPlane"></add>
</niobject>
<niobject name="NiSphericalCollider" inherit="NiParticleCollider">
<add name="Radius" type="float"></add>
<add name="Position" type="Vector3"></add>
</niobject>
|
NiTriShapeDynamicData Добавить после блока <niobject name="NiTriShapeData" abstract="0"
| ||
|
<=
|
<niobject name="NiTriShapeDynamicData" abstract="0" inherit="NiTriShapeData">
Holds mesh data using a list of singular triangles.
<add name="Active Vertices" type="ushort">Num Active Vertices.</add>
<add name="Active Triangles" type="ushort">Num Active Triangles.</add>
</niobject>
|
Добавить новый раздел в конец файла.
| ||
|
|
<niobject name="NiCollisionSwitch" abstract="0" inherit="NiNode">
</niobject>
|
Добавить новый раздел в конец файла.
| ||
|
|
<niobject name="NiAccumulator" abstract="1" inherit="NiObject" />
<niobject name="NiClusterAccumulator" abstract="0" inherit="NiAccumulator" />
<niobject name="NiAlphaAccumulator" abstract="0" inherit="NiAccumulator" />
<niobject name="NiSortAdjustNode" inherit="NiNode">
Sorting alpha.
<add name="Sorting Mode" type="SortingMode" default="SORTING_INHERIT"></add>
<add name="Accumulator" type="Ref" template="NiAccumulator"></add>
</niobject>
|
Экспериментальный раздел. От Greatness7(С)
Добавить новый раздел в конец файла.
BSMirroredNode, TES3ObjectExtraData BrickNiExtraData NiBSAnimationManager NiKeyframeManager.
Эти объекты хотя и не подразумеваются для добавление в ниф файлы, но записи о них могут быть полезны.
Особенно в целях дебагинга.
И если проводился захват дампа памяти в ниф файл.
Если выставить значение abstract="1", модели содержащие эти свойства на смогут быть открыты!
Добавлять записи об этих разделах имеет смысл только в каких-то тестовых целях. | ||
|
|
<niobject name="NiKeyframeManager" abstract="0" inherit="NiTimeController">
<add name="Num Sequences" type="uint"></add>
<add name="Sequences" type="NiSequenceMW" arr1="Num Sequences"></add>
</niobject>
<niobject name="NiBSAnimationManager" abstract="0" inherit="NiNode">
For NiBsANimationNodes (only) seems to be.
</niobject>
<niobject name="BSMirroredNode" abstract="0" inherit="NiNode">
</niobject>
<niobject name="BrickNiExtraData" abstract="0" inherit="NiExtraData">
<add name="String" type="string">.</add>
</niobject>
<niobject name="TES3ObjectExtraData" abstract="0" inherit="NiExtraData">
<add name="String" type="string">.</add>
</niobject>
|
еще один экспериментальный твик NiRendererSpecificProperty
Добавить новый раздел в конец файла.
| ||
|
|
<niobject name="NiRendererSpecificProperty" abstract="0" inherit="NiProperty">
<add name="Flags" type="Flags"></add>
</niobject>
|
Добавить новый раздел в конец файла.
| ||
|
|
<niobject name="NiFltAnimationNode" abstract="0" inherit="NiSwitchNode">
<add name="Period" type="float">Delay time.</add>
</niobject>
|
Добавить новый раздел в конец файла.
| ||
|
|
<compound name="NiPlane2" size="16">
A plane for niBspNode.
<add name="AlignmentXYZ" type="Vector3">The plane normal`s alignment.</add>
<add name="Area Size" type="float">The size of plane.</add>
</compound>
<niobject name="NiBSPNode" abstract="0" inherit="NiNode">
<add name="Model Plane" type="NiPlane2"></add>
</niobject>
|
Добавить новый раздел в конец файла.
| ||
|
|
<niobject name="NiScreenPolygon" abstract="0" inherit="NiObject">
<add name="Num Vertices" type="ushort"></add>
<add name="Vertices" type="Vector3" arr1="Num Vertices"></add>
<add name="Has Texture Coords" type="bool"></add>
<add name="Texture Coords" type="TexCoord" arr1="Num Vertices" cond="Has Texture Coords"></add>
<add name="Has Vertex Colors" type="bool"></add>
<add name="Vertex Colors" type="Color4" arr1="Num Vertices" cond="Has Vertex Colors"></add>
<add name="Num Property States" type="uint"></add>
<add name="PropertyStates" type="int" arr1="Num Property States"></add>
</niobject>
|
Заменить оригинальный раздел!
| ||
|
|
<niobject name="NiLinesData" inherit="NiGeometryData">
Wireframe geometry data.
<add name="vertexConnectivityFlags" type="byte" arr1="Num Vertices">Is vertex connected to next vertex.</add>
</niobject>
|
Заменить оригинальный раздел!
| ||
|
|
<niobject name="NiCamera" inherit="NiAVObject">
<add name="Frustum Left" type="float"></add>
<add name="Frustum Right" type="float"></add>
<add name="Frustum Top" type="float"></add>
<add name="Frustum Bottom" type="float"></add>
<add name="Frustum Near" type="float"></add>
<add name="Frustum Far" type="float"></add>
<add name="Viewport Left" type="float"></add>
<add name="Viewport Right" type="float"></add>
<add name="Viewport Top" type="float"></add>
<add name="Viewport Bottom" type="float"></add>
<add name="LOD Adjust" type="float"></add>
<add name="Scene" type="Ref" template="NiNode"></add>
<add name="Num Screen Polygons" type="uint"></add>
<add name="Screen Polygons" type="Ref" template="NiScreenPolygon" arr1="Num Screen Polygons"></add>
</niobject>
|
NiPlane
Добавить новый раздел в конец файла.
Это не новый объект, а лишь правильное название для настроек.
| ||
|
|
<compound name="NiPlane" size="16">
A plane.
<add name="Normal" type="Vector3">The plane normal`s alignment.</add>
<add name="Distance" type="float">The distance of particles reaction.</add>
</compound>
|
Добавлять в конец файла.
| ||
|
|
<niobject name="NiBltSource" inherit="NiObject">
<add name="Use External" type="byte" default="1"></add>
<add name="File Name" type="FilePath" cond="Use External"></add>
<add name="Has Pixel Data" type="byte" default="1" cond="Use External == 0"></add>
<add name="Pixel Data" type="NiPixelFormat" cond="Has Pixel Data"></add>
</niobject>
|
также добавлять в конец файла в тестовых целях.
| ||
|
|
<compound name="NameControllerPair">
<add name="Name" type="string"></add>
<add name="Controller" type="Ptr" template="NiKeyframeController"></add>
</compound>
<compound name="NiSequenceMW">
<add name="Sequence Name" type="string"></add>
<add name="Use External" type="byte"></add>
<add name="Keyframe File Name" type="string" cond="Use External != 0"></add>
<add name="unknown int" type="int" cond="Use External == 0"></add>
<add name="unknown object" type="Ptr" template="NiObject" cond="Use External == 0"></add>
<add name="Num Name Controller Pairs" type="uint"></add>
<add name="Name Controller Pairs" type="NameControllerPair" arr1="Num Name Controller Pairs"></add>
</compound>
<niobject name="NiKeyframeManager" abstract="0" inherit="NiTimeController">
<add name="Num Sequences" type="uint"></add>
<add name="Sequences" type="NiSequenceMW" arr1="Num Sequences"></add>
</niobject>
|
Использовать только в тестовых целях и только для МВ!
| ||
<niobject name="NiSkinPartition" abstract="0" inherit="NiObject">
Skinning data, optimized for hardware skinning. The mesh is partitioned in submeshes such that each vertex of a submesh is influenced only by a limited and fixed number of bones.
<add name="Num Skin Partition Blocks" type="uint">Unknown.</add>
<add name="Skin Partition Blocks" type="SkinPartition" arr1="Num Skin Partition Blocks">Skin partition objects.</add>
</niobject>
|
|
<niobject name="NiSkinPartition" abstract="0" inherit="NiObject">
<add name="Num Partitions" type="uint"></add>
<add name="Partitions" type="Partition" arr1="Num Partitions"></add>
</niobject>
|