...Вчера нашёл решение проблемы, с которой на всех форумах - и наших, и англоязычных - отсылали из NifSkope в Blender или в 3D Max. Оказалось, можно и без них. Подсказка нашлась "на самом дне" только одного английского форума, более нигде, так что решил перевести и поделиться.
Проблема "У меня не сдвигается модель (части модели) в Nifskope!" Или "в NifSkope сдвигаю, а в игре они видны по-прежнему несдвинутыми!" довольно частая, постов и вопросов об этом много. Есть несколько вариантов действий.
Первый, самый простой - трансформация масштаба. Выделяем нужную ноду TriNiTriShape, правый клик по ней - Transform - Scale Vertices. Появляется окошко, редактируем цифры в нём. Цифры больше 1 увеличивают модель, от 0 до 1 (но не равные 0) - уменьшают. При этом, если исходный "центр" модели, от которого ведётся "отсчёт", расположен не внутри, а вне её, то изменение масштаба будет приводить и к сдвиганию модели в пространстве. (В частности, так сделаны капюшоны в Skyrim. У них центр вынесен так далеко вниз, что даже при незначительном, во втором-третьем знаке после запятой, изменении по оси Z модель заметно "подскакивает" вверх, практически не меняясь зрительно. Этим можно пользоваться для сдвижки).
Это изменение работает сразу, немедленно и на всех мешах. Достаточно сохранить после него модель "Save As..."
Второй - смещение без изменения масштаба. Выделяем нужную ноду TriNiTriShape, правый клик по ней - Transform - Edit. Далее выбираем Translation (смещение) или Rotation (поворот). Но просто сохранить модель может оказаться недостаточно, в игре изменений не будет. Тогда после завершения редактирования нужно выполнить TriNiTriShape - Transform - Apply (применить).
Третий вариант (ради которого тема). Некоторые ноды не сдвигаются вторым способом. При попытке применить к ним Apply вы получите сообщение
"On animated and or skinned nodes Apply transformation most likely won't work the way you expected it"
(На анимированных или привязанных к скелету нодах трансформация почти наверняка не сработает так, как вы ожидаете.)
Это значит, что такой TriNiTriShape привязан не к геометрическому "центру отсчёта", а к костям скелета модели. Потому-то он сдвигается в NifSkope и не сдвигается в игре.
Получив такое сообщение, можно всё же попытаться Transform - Apply. Шансы есть. Есть посты, где люди пишут, что у них "прокатило". Но скорее всего, в NifSkope меш сдвинется, а в игре просто станет невидим.
Можно пустить в ход первый способ, но иногда и он не подходит. (У меня так получилось с накладной деталью на шлем, пересаженной из другой модели: после пересадки она смещалась - сидела в стороне от "нового" шлема. При попытке сделать Transform - Scale Vertices она "разрасталась", оставаясь смещённой, вместо того чтоб сдвинуться и плотно прилечь к шлему.)
Решение такое. Раз наш нод - "skinned", у его под ветками NiTriShape и NiTriShapeData должна быть BSDismemberSkinInstance. Раскрываем её. В показавшемся выбираем NiTriSkinData и смотрим в нижнее окошко NifSkope, там, где подробности. В верхней строке видим опцию SkinTransform, а внутри неё - координаты X, Y, Z. Игнорируем! Это нам не подходит (хотя выглядит как то, что нам надо). Изменение здешних X, Y, Z на игре не отражается.
Смотрим ещё ниже, находим и раскрываем BoneList. Откроются "под-ветви", тоже BoneList. Каждая соответствует одной из тех костей скелета, которые влияют на нашу модель. (Например, в случае шлема костей две - это голова (head) и хребет (spine), соответственно под материнским BoneList будут два подчинённых BoneList). Внимание - кости тут никак не поименованы. Какая из них какая, придётся догадываться. Обычно BoneList'ы перечислены здесь в том же порядке, в каком перечислены "их" кости в верхнем левом окне NifSkope. Там эти кости могут выглядеть как отдельные "независимые" NiNodes с "последними" номерами, внизу после прочих нодов, подвязанные лишь к основному материнскому ноду всей модели.
Итак, находясь в BoneList в нижнем окне, раскрываем нужный нам подчинённый BoneList. Внутри него есть ещё один SkinTransform. (Не путать его с описанным выше "ложным" !) Вот у него-то и редактируем X, Y, Z. Такой "истинный" SkinTransform будет свой на каждую кость, то есть внутри каждого подчинённого BoneListа.
Изменения проявятся в игре сразу, как только модель сохранена Save As. Делать Transform - Apply не нужно.
Примечание: если модель завязана больше чем на одну кость скелета, а вы отредактируете X, Y, Z только у одной, - модель может исказиться, скособочиться или начать двигаться в игре забавным неправильным способом. Перепривязка должна касаться всех влияющих на модель костей.
И никакого 3D MAX !...
Сообщение отредактировал Старый геймер: 19 декабря 2013 - 14:31