Конференция Призма » Программирование » Плагины для Skyrim » Редактирование NIF-файлов

Страниц (1): [1]
 

1. ragumah - 04 Декабря, 2017 - 21:31:48 - перейти к сообщению
Приветствую. В общем, немножко о результатах. Со стандартными (стоковыми) tri файлами голова нормально пересаживается. Сторонним компаньонам (София, Вилья) тоже получилось создать расу и присоединить авторскую голову, но до конца их полную работоспособность не проверял - времени нет, хотя, вроде говорят и выглядят норм.
Есть пару технических вопросов:
- в нифе, после копирования какой-нибудь части, она (часть) появляется внизу. Далее нужно прописать цифру справа, точно такую же какую меняем, после старую удаляем, а новую перемещаем вместо старой так, чтобы цифра слева была как у старой части. Весь этот процесс несложный, но напрягает то, что при перемещении к верху все остальные смещаются и их приходится перемещать на старые места. Отсюда вопрос - можно ли упростить этот процесс, может есть функция замены?
- СК сохраняет голову и, как я понимаю, подгоняет тональность головы к телу (ctrl+F4), но если я меняю голову в нифе, то этой подгонки нет. Отсюда вопрос - как можно поменять тональность головы или тела в отдельности в СК и чем проще это сделать без него?
2. Anton - 05 Декабря, 2017 - 08:34:29 - перейти к сообщению
Я давно и много редактирую эти файлы, поэтому даже забыл, как не просто это было в начале. NIF-файл штука не простая. Данные там оптимизированы для восприятия движком игры и не очень пригодны для чтения людьми. Авторы NIFskop-а сделали гигантскую работу. Они взломали этот формат, научились его читать и, главное, сделали подсказку для других программистов, как работать с этими файлами. Дело в том, что Help к НИФскопу это подсказка именно для программистов. Там расписаны все типы данных и их положения в файле.
Это иерархическая система вроде дерева. Посмотри на главный NiNode. там внизу пункт Children, в котором список номеров дочерних узлов. В тех - свои списки. NiTriShape это форма некоторого объекта. В ней вместо списка дочерних узлов, указаны другие узлы, которые эта форма использует. Там должны быть Data (3D-данные формы) и Skin Instance (привязка к костям, или BSDismemberSkinInstance). В пункте Properties указаны номера блоков, где содержатся управление цветом, светом, текстурами и прозрачностью. Так вот, все изменения номеров должны делаться в списках дочерних объектов, либо в номерах напротив Data, Skin Instance, Properties.

При вставлении блока в НиТриШейп ему присваивается некоторый номер. Этот номер должен быть указан среди дочерних номеров узла, куда мы хотим его вставить. Либо в качестве Data, Skin Instance и т.д.

У NiTriShape обязательно есть Name. Все имена хранятся в общем списке строк. НИФскоп может показывать имя узла не правильно. Т.е. там будет фигурировать некоторая строка, хотя на самом деле там пусто. Истина выясняется при попытке редактировать эту строку (Edit String). Там не должно быть пусто. Если имя пустое, модель может выкидывать игру на рабочий стол. Причём, делает это случайным образом, что сильно затрудняет идентификацию дефектной модели.

Само значение имени тоже важно. Если игра использует ретекстур (подмену текстуры для данной формы), то в моде прописывается как название узла, так и набор текстур для него. При ошибке в названии (и порядке узлов)подмена текстур не произойдёт.

Последовательность узлов не играет особой роли, если это изолированная модель и не используется ретекстур. Совсем другое дело, если это модель парная для толстого и тонкого тела, или модель используется с морфингом. Тогда последовательности узлов в паре должны совпадать. При нарушении на экране возникнет каша из треугольников.
При сохранении файла НИФскоп по умолчанию выстраивает блоки по своему усмотрению и может нарушить их порядок. Эта опция в нём может отключаться.

Я пользуюсь двумя НИФскопами. 1.1.0-RC-6 для экспорта и импорта в OBJ-файлы (старшие версии этого не делают, либо делают с ошибкой) и самой последней. В самой последней можно мышкой выделять нужный вертекс и редактировать его положение цифрами.
3. ragumah - 06 Декабря, 2017 - 22:27:59 - перейти к сообщению
Очень познавательно. Но все таки, можно ли упростить операцию замены блока (лица к примеру) : копи бранш - пасте бранш - меняем Name на то, что нужно заменить - ctrl+dlt старого блока - ctrl+вверх (вниз) до той же позиции что и меняемая - возврат блоков на прежние позиции.
4. Anton - 06 Декабря, 2017 - 23:03:27 - перейти к сообщению
ragumah, чтобы заменить лицо, не надо заменять весь блок NiTriShape. Достаточно заменить в нём только блок NiTriShapeData, а он автоматически встанет в нужное положение и имени у него никакого нет и ошибки имени не будет. А если там поменялось число вертексов, но надо заменить ещё и блок BSDismemberSkinInstance. Ну и текстуры так же можно заменять. А все основные блоки NiTriShape остаются на своих местах.
Ctrl+Up и Ctrl+Down для блоков работают.
5. ragumah - 07 Декабря, 2017 - 00:37:21 - перейти к сообщению
Антон, такое ощущение, что мы говорим о разных нифскопах. По самому дереву данных (то, что я вижу при открытии головы): 0 BSFadeNode (это я полагаю главный NiNode), далее при его раскрытии идут уже другие узлы 1NiNode - NPC Head, 2NiNode - NPC Spine, 3NiNode - BSFaceGenNiNodeSkinned, далее при его раскрытии идут несколько BSDynamicTriShape - глаза, голова, брови, челюсть, линия волос и волосы.
Так вот, не могу найти блок NiTriShapeData. NiTriShape - это и есть BSDynamicTriShape?
6. Anton - 07 Декабря, 2017 - 06:39:39 - перейти к сообщению
Точно! Только не разные НИФ-скопы, а разные NIF-ы. Это разница NIF-ов для Skyrim SE и LE! У меня постоянно вылетает из головы, что ты редактируешь NIF-ы для SE. А я (и не только я) с ними ничего толком делать не могу и не делаю. Есть утилита для преобразования NIF-ов LE в SE, которой все и пользуются. А ведь NIF-ы SE можно открыть только последним НИФскопом, а он вообще не умеет чего-либо в себя импортировать. Т.е. с ним я ничего не могу делать Блендером, а у остальных наверняка те же проблемы с 3D-Максом. В тех модах, что я делал под SE, я все модели делал в LE, а потом конвертировал их в SE.

Кстати, вот сейчас залез в модель головы в SE и вижу сильное отличие в данных. Так как все данные получаются тупой конверсией, все они должны были быть и в LE. Но в новой версии вертекс уже не трёхмерная величина, а четырёхмерная. Добавилась ещё четвёртая координата W. Для головы она 0, а вот для бровей - совсем нет. Предстоит разбираться, откуда эти данные берутся. Вообще то четвёртое измерение должно отвечать за перспективу и, наверное, связано перспективными текстурами (их нет в оригинальном LE, но мододелы там что-то творили).

Теперь координаты вертексов содержатся BSDynamicTriShape. А треугольники теперь полностью ушли в партиции. Кстати, это правильно, так как раньше треугольники в партициях тупо дублировали треугольники НиТриШейпа. А вот НИФ-скоп все новые треугольники красит в красный цвет. А это значит, что он их считает ошибочными и это значит, что он ещё не умеет до конца правильно работать с этим новым форматом.
7. ragumah - 07 Декабря, 2017 - 11:46:22 - перейти к сообщению
Спасибо за пояснение. Если у тебя получится разобраться или будут еще какие нибудь наработки для начинающих, то сделай туториал пожалуйста. Пока что все, что получается делать у меня в нифе - это благодаря твоим подсказкам и методу волшебного тыка.
8. Anton - 07 Декабря, 2017 - 12:49:35 - перейти к сообщению
Метод волшебного тыка это наш фундамент Улыбка
9. ragumah - 08 Декабря, 2017 - 20:12:46 - перейти к сообщению
Антон, может создать еще отдельную тему по техническим вопросам и туда перенести решаемые мной (с твоей помощью) задачи? А то как то тема музея больно уж ими обросла.
(Добавление)
Сплошной офтоп в общем Радость
10. Anton - 08 Декабря, 2017 - 20:35:12 - перейти к сообщению
Нет, не стоит, хлопотно. Просто когда видишь, что тема уходит в сторону, спокойно создавай новую ветку. А почему именно музей, понятно. Потому что я его переносил в Skyrim SE Улыбка
Globe Globe Mask
Число посетителей, Время, Дата

Script Execution time: 0.0175     Gzipped