Эта программа позволяет создавать скин для мешей в НИФ файлах.
Область применения: - скининг моделей в НИФ файле (перегенерируются блоки [NiSkinInstance/BSDismemberSkinInstance], [NiSkinData]и [NiSkinPartition]) - позволяет работать с Блендером 2.62+ (может быть легко модифицирована для работы с другими 3Д редакторами) - массовый скининг каких нибудь объектов в нескольких НИФ файлах - очень быстрая работа программы
(...инструкция по работе с программой находится внутри архива...)
Рассчитана на использование совместно с другой моей программой "MeshInjector".
Надеюсь утилита будет полезна модостроителям (особенно тем, кто не работает в 3DMax и не имеет возможности использовать NifScripts)
Если честно не понял, как запустить прогу. В cmd ее не видит, пишет, что MeshInjector не является выполняемым процессом или что-то типа того. Мож ее куда-нить в System32 пихнуть? (Распаковал в папку d:/3d/Injector/... ) Юзаю Win7 64-bit. Опиши по подробней плизз.
Изменение репутации для пользователя Snakesalamandra
Мне кажется я знаю в чём тут дело. Я уже встречал подобные вопросы на Нексусе. (оказалось, народ не очень себе представляет, что такое файловая система и как она устроена )
Чтобы запустить утилиту именно через системную "командную строку" (запустив "CMD.exe" в строке "Выполнить") надо сначала перейти в открывшемся чёрном окошке в папку, куда распакована эта программа. Предположим, вы распаковали её в папку "C:\MyTools\", тогда в командной строке надо написать "cd c:\mytools\" и нажать [Enter]. Только после этого можно запустить программу по имени "skininjector.exe".
PS: А вообще пользуйтесь командной строкой файлового менеджера на подобии "Total Commander" или "Far". В них командная строка заполняется комбинацией [CTRL]+[Enter]на выбранном файле, и руками вообще ничего вводить не надо. PPS: grv_alex, не заметил как ты свой пост отредактировал, (мне уведомление об этом не пришло), а так бы раньше ответил.
anton, написал под выложенным модом, но наверное. правильнее будет и сюда запостить:
Антон, хорошие ты утилиты делаешь, но, извини, объяснять, как ими пользоваться, у тебя не очень получается Ну прежде всего, то, что является экспортом для NIF при извлечении из него информации в блендер, одновременно является импортом для блендера, так что названия экстрактор/инжектор ясности не добавляют. С внедрением развесовки из НИФа в блендер (Mesh_Tools_N5-S) я, кажется, справился, помог пример в архиве. Но сразу возникает вопрос, почему тот этап работы, который должен всё начинать, имеет предпоследний номер 5? Ведь начинаем мы работу по переделке брони именно с загрузки прототипа в блендер. Ну, хорошо, загрузил, отредактировал, следующим этапом должен стать перенос развесовки из блендера в НИФ. А вот это не получается. Вернее, получается и блендер не ругается, но файл Weights.txt содержит у меня очень скудную информацию [Begin]1 [End]:(
Нужно более подробное описание.
1. Как я понял, сама модель у тебя импортируется и экспортируется в виде OBJ-файла. Это очень понятно, это все версии блендера делают нормально. Это я умею.
2. Остаётся проблема с привязкой к костям с соответствующими весовыми коэффициентами. Для этого надо изменять DSDismemberSkinInstance вместе с редактированием модели. Импорт этой привязки к костям у тебя делает Mesh_Tools_N5. Но при этом непонятно, должен ли быть к этому моменту импортирован в блендер скелет?
3. Когда работа в блендере закончена, надо перенести информацию из него в NIF. Сама модель переносится без труда через OBJ-файл.
4. Как из блендера вытащить развесовку? Это у меня не получается. Скрипт срабатывает, но даёт [Begin]1 [End]Может быть, в блендере не хватает скелета? Но тогда в какой момент и как его туда правильно импортировать?
Ну и последний вопрос самый наглый Можно ли модель, которая была создана без скелета, привязать в блендере к скелету так, чтобы вертексы модели имели точно те же привязки к скелету и весовые коэффициенты, что и ближайшие к ним точки тела? Это нужно для того, чтобы тело не вылезало через тесно подогнанную одёжку при движениях тела.
Главная проблема у меня заключается в том, что мне приходится одновременно работать с двумя неизвестными: изучать работу с костями в блендере и разбираться с твоими утилитами. По отдельности не получается. так как без твоих утилит мне в современном блендере костей не видать
Названия действительно не однозначные, но давал я их из расчёта на НИФ файлы, т.е. экстрактор из НИф-а, и иньектор в НИФ. Номер у NIF Tools N5 - Skin Extractor не зависит от порядка использования. Просто я его релизнул предпоследним, поэтому он получил релизный порядковый номер 5. Файл Weights.txt получается пустой из за моего особенного алгоритма экспорта скина. Дело в том, что скрипт экспортирует данные только о тех мешах, которые в Блендере приаттачены к Арматуре (причём арматура должна быть только одна). Следовательно перед экспортом нужно обязательно добавить в Блендеровский проект нужный Скелет и привязать к нему все нужные меши. Так было удобно создавать сам скрипт экспорта, да и обычно я работал со скином только для последующего создания анимации, поэтому скелет у меня присутствовал по любому.
Для брони можно взять готовый ванильный или UNP скелеты из моего мода "Animation Tools N3 - with IK" (добавляется он в проект через CTRL-F1 (Append), потом выбираем файл с арматурой и далее в его разделе Objects выбирает нужную арматуру для переноса в свой проект).
Можно и такое, хотя я не совсем понял что именно, но можно Можно сделать одежду, скопировать скин с тела (например UNP) на неё, потом импортировать этот скелет и приаттачить к нему модель (для этого нужно выделить сначала Меш, потом Скелет, а потом комбинацией CTRL+P и просто "Armature Deform" без подпунктов, привязать модель к скелету)
Согласен, я тот ещё обьяснятель, но стараюсь как могу
anton, спасибо. Сейчас понятно, пошёл дальше копать
Добавлено (07 Октября 2014, 14:27) --------------------------------------------- Ну, всё получилось Сделал одёжку (всего лишь кольчугу) в двух размерах, скопировал на неё развесовку и экспортировал в НИФ. В общем, получил все необходимые мне операции. Для комфортной работы не хватало хорошего описания и организации файлов. Просто сложил всё в одном месте, вместо командной строки приготовил БАТ-ники. Ещё, нужно иметь заготовку проекта с телом и скелетом. Затык у меня был в двух местах: 1. Я редактировал броню в блендере и только после этого накладывал на неё развесовку и экспортировал. Получалась ерунда с числом вертексов. При экспорте в OBJ их число другое. Выходит, накладывать веса и экспортировать надо сразу после импорта. Но скорее всего, я просто ещё не умею управлять всеми опциями экспорта. 2. Мне нельзя было терять текстурную сетку, так как я использовал ту же развёртку, которую имеет тело. Но редактирование с объединением вертексов и последующим экспортом в OBJ полностью нарушает текстурную развёртку. Помог экспорт в 3ds-файл. После него мне понадобилось чуть поправить текстурную сетку только в тех местах, которые я редактировал.
Добавлено (15 Декабря 2014, 07:44) --------------------------------------------- anton, а нельзя ли выложить утилиты для работы с Vertex Colors? Дело в том, что их нельзя экспортировать/импортировать через OBJ А необходимость периодически возникает. Намедни редактировал тело огненного атронаха, так пришлось вручную в НИФскопе нескольким сотням вертексов цвета ставить Ещё это совершенно необходимо для редактирования скал. Из-за слишком большого числа вертексов (несколько тысяч) пришлось отказаться от редактирования антуража Небесной Кузни.
Добавлено (20 Декабря 2014, 08:14) --------------------------------------------- anton, а на чём ты программировал EXE-шники? Как узнал спецификацию NIF-а?
Добавлено (20 Декабря 2014, 11:54) --------------------------------------------- Ещё возможен такой алгоритм очистки списка названий. Вручную реализуется так: 1. Запоминаем названия всех узлов кроме корневого. Нужно запоминать только названия нитришейпов. 2. Удаляем привязку к костям и все кости. 3. Ставим число названий в списке 1 (пропадут все, кроме корневого узла) 4. Забиваем вручную число и названия нитришейпов (если их всего один, то всё совсем просто ) 5. Сохраняем ниф и инжектируем туда скин. В этом случае в таблице будут только названия всех нитришейпов и всех костей, но по одному разу По-видимому, этот алгоритм лучше всего встроить в SkinInjector. Это полезно ещё и потому, что тогда инжектирование будет происходить в чистую модель. Я до конца не разобрался, но, похоже, что если модель не очистить от старых костей и скина, то инжектирование происходит иначе, чем в чистую модель.
Изменение репутации для пользователя anton
antonOffline
Сообщение №10
написано: 20 декабря 2014, 11:13
| Отредактировано: anton - 20 декабря 2014, 11:18
Myprism, Вот скрипт экспорта Vertex Colors для триангулированной модели из Блендера в ТХТ файл: (импорт я не делал т.к. ни разу не было потребности а этом)
Код
#========================================================================================================== # Save VERTEX COLORS for Mesh #========================================================================================================== import bpy bpy.ops.object.mode_set(mode='OBJECT') MyObject = bpy.context.active_object if not MyObject: raise Exception("ERROR: No OBJECT selected.") MyObjectMesh = MyObject.data if not MyObjectMesh: raise Exception("ERROR: Could not get MESH data from Selected object")
# save Vertex Colors (for Trangulated mesh ONLY) (OBJ file already must have Triangulated faces) # Эти группы ВертексКолоров соотведствуют координатам вертексов в Фейсах (сколько в обьекте Фейсов - столько будет экспортировано строк )
for faces in facelist: MyFileWrite("%10.6f " % colorlist[faces.index].color1.r) # VertexColor for First vertex in Face MyFileWrite("%10.6f " % colorlist[faces.index].color1.g) MyFileWrite("%10.6f " % colorlist[faces.index].color1.b) MyFileWrite("%10.6f " % colorlist[faces.index].color2.r) # VertexColor for First vertex in Face MyFileWrite("%10.6f " % colorlist[faces.index].color2.g) MyFileWrite("%10.6f " % colorlist[faces.index].color2.b) MyFileWrite("%10.6f " % colorlist[faces.index].color3.r) # VertexColor for First vertex in Face MyFileWrite("%10.6f " % colorlist[faces.index].color3.g) MyFileWrite("%10.6f\n" % colorlist[faces.index].color3.b)
MyFileWrite("[End]\n") MyFile.close() print("\nWriting to file [%r] done." % FilePath)
Полученный ТХТ файл нужно указать программке "MeshInjector" в качестве третьего параметра.
Программирую я на MS Visual Studio 2013/2010 Express. Спецификацию НИФ-а узнал случайно, глянув в помощь Нифскопа. У него просто море информации оказалось, и именно такой, которая нужна программисту. После этого и началось всё моё "творчество" )))
Дубли блоков или имён у меня никак не влияли на импорт скина, поэтому я и не усложнял себе задачу их устранением. Конечно можно искать существующие блоки по именам, и если такие уже есть, то не создавать их, а использовать существующие. Сделать это относительно просто, но может возникнуть проблема. Если вдруг где то в НИФ файле окажется Нод с таким же именем, но никак не относящийся к нашему скину, то будет такой баг, который потом фиг найдёшь просто так. В общем надёжнее будет просто создать все нужные блоки и сделать привязку именно к ним.
anton, у меня возникла проблема со скинингом кистей рук. Я сделал кисть руки женского скелета так, что все косточки в блендере лежат внутри пальцев. Но мне нужна развесовка по костям. Поступил просто: взял из твоего примера кисти рук и отскинил по ним. Но в игре мои "пальцы" оказались чуть ли не в 2 раза длиннее и не помещаются в человеческой кисти руки. Понятно, что со скинингом что-то не то, так как в блендере там всё прекрасно помещается и в кисть UNP и в кисть DG. Тогда я беру кисть DG и импортирую её развесовку в Блендер. Использую её как образец для скининга. После этого в игре всё становится нормально, пока рука висит. Но если её сжать в кулак, то пальцы протыкают ладонь и вылезают с её тыльной стороны. Что-то тут не так с костями и это сказывается на экспорте. Ведь экспорт тоже использует скелет. Ты там ничего с костями пальцев не намудрил?
Myprism, вроде нет, сколько я делал разных поз и анимаций - проблем не возникало. Мне трудно представить отчего так может быть, если можешь, скинь Blend и NIF файлы для кистей, попробую разобраться.
anton, чтобы учесть коэффициент 0.85 для женских рук, можно копировать развесовку с уже готовых рук, но при экспорте надо сохранить старые (уже имеющиеся с коэффициентом 0.85) привязки к костям руки. Я бы перенёс положения и углы костей вручную, но их 38 и их трудно идентифицировать Кстати, почему бы не ввести опцию сохранения привязки к костям от образцовой модели?
anton, хорошо, что я не успел вручную параметры костей забить Спасибо! А почему там два файла? Почему ты думаешь, что может потребоваться ещё и коэффициент 0.86? Экспериментально я это проверить не смогу, так как вряд ли замечу разницу визуально.
Добавлено (01 Января 2015, 23:07) --------------------------------------------- Попробовал новую утилиту. Получил странный результат. Всё, что касалось пальцев - отлично, уменьшились как надо. Но вот верхние фаланги, которые относятся к кости Hand - остались увеличенными. Но кисть у меня состоит из скелетной кисти и прозрачной человеческой. Так вот, человеческую я не изменял, но когда скопировал ей нитришейп в общий НИФ, то получил совсем странный результат - рука искажена и распухли верхние фаланги относящиеся к кости Hand. А вот этого совсем не должно быть, так как модель и её скининг не менялись. А это уже значит, что новый вариант утилиты меняет не только привязки костей, но и сами кости. Проверил, так и есть. Кости после утилиты не те, что были в оригинале. Похоже, что скининг теперь делается правильно, если модель поставить на старые неизменённые кости.
Изменение репутации для пользователя anton
antonOffline
Сообщение №16
написано: 1 января 2015, 20:23
| Отредактировано: anton - 1 января 2015, 21:46
Myprism, понял, странно конечно, буду проверять... (два варианта то я просто так сделал, т.к. у меня не получились смещения костей паташинов в точности такие же как у исходных кистей)
.....
Сделал комплексную проверку в игре НИФ-а кисти, содержащую нормальную кисть вместе с её скелетной формой. Результат: всё идеально работает ! Ничего никуда не выпирает и анимируется как положено. Вот тот НИФ, который я проверял: "Скачать"
ПС: но кажется я знаю почему у тебя не получилось. Сам, когда готовил НИФ заготовку для SkinInjector-а, один раз поленился удалить все ноды, и получил в итоге глюк, когда пальцы "втянулись" немного по оси Х. (оказалось, что моя программка всё таки не создаёт новые ноды, если в НИФ-е они уже существуют с такими же именами , как я про это забыл - ума не приложу ! , в итоге сам и попался на тот глюк, что однажды описывал !)
anton, да, та моя проблема связана именно с оставлением нодов. И, как раз, это выглядело как втягивание по оси Х. Сейчас, удалив весь скининг и кости я получаю для костяной кисти точно такой же результат, как у тебя. Но есть ещё маленькая проблема. Это, скорее всего, то, что заставило тебя сделать утилиту с коэффициентом 0.86. Дело в том, что отскиненная костяная кисть не совсем вписывается в родную. Как раз, она оказывается чуть-чуть меньше. Но если отскинить и человеческую кисть, то всё вписывается правильно. Т.е. модель кисти (человеческой) загруженная в Блендер и отскиненная заново (из твоего примера) не совпадает с оригинальной, а оказывается чуть-чуть меньше. Почему? Вроде, этого быть не должно. Ведь это означает, что родная кисть отскинена иначе, по другому алгоритму. В оригинальную кисть лучше вписывается костяная с коэффициентом 0.86. С анимацией всё в порядке.
Изменение репутации для пользователя anton
antonOffline
Сообщение №18
написано: 2 января 2015, 10:38
| Отредактировано: anton - 2 января 2015, 10:47
Myprism, да дело в том, что положение отмастабированных мною нодов, и скина для них, не совпадает с оригинальным (ну или с тем, который выдают утилиты NifScript у Макса, ведь эти UNP руки отскинены именно так).
Несовпадение находится в пределах ~0.15 юнита, что практически незаметно, но всё же. И поэтому я не могу до конца понять, как они обрабатывают эти отмасштабированные косточки. (даже может быть ошибка и у них, а не у меня ... ? , всякое ведь бывает)
Мой алгоритм довольно прост: если родительская косточка содержит в своём имени строку "Fingers", то к координатам дочерней косточки применяем масштабирование
также и для Global_Node_Y и Global_Node_Z (где Parent_Scale всегда равен "0.8517", т.е. масштабу косточки "Hand" у женского скелета).
Откуда получается несовпадение, пока не представляю.
---------------------------- Забыл добавить: в твоём примере я сгенерил скин для костяной формы и для одной из форм обычной ркуи, вторая форма обычной руки осталась БЕЗ скина вообще. Так вот - обе формы: отскиненная мной и не отскиненная вообще - совпадают идеально (проверял в Нифскопе). Так что похоже что программка считает правильно...
anton, у меня там НИФ не простой там для обеих моделей стоит один и тот же набор NitriShapeData и, хотя DismemberSkinInsnance и разные, у них стоит общий (один и тот же) NiSkinData В любом случае, теперь утилиты позволяют справиться с женскими руками. Можно или коэффициент 0.86 поставить или отскинить руки, тогда соответствие всех моделей в руках вообще идеальное.
Изменение репутации для пользователя anton
antonOffline
Сообщение №20
написано: 2 января 2015, 12:52
| Отредактировано: anton - 2 января 2015, 12:53
anton, а ведь по описанию алгоритма получается, что новая утилита, это не утилита для скининга кистей только, а универсальная утилита скининга для женского тела? Ведь всё, что кроме пальцев рук и того, откуда они растут, имеет масштаб 1.
Myprism, в общем то да, мне просто так удобнее помнить, что есть нормальная утилита, а есть её модификация, которую нужно использовать только для кистей женских рук. Но я подумываю, чтобы сделать одну, универсальную, тем более что уже почти знаю, как это сделать
Люди добрые, помогите отскинить броньку! Она мне оч нравится, а из обла её никто портировать не удосужился (вернее, есть один умелец, но он не захотел свой порт выкладывать, тока скринами похвастался). Я её подогнала под тушку, которую использую (cbbe с подкрученными слайдерами), правда, только нулевую модель, ибо делать ещё и поддержку слайдеров комплекции просто нет сил. Но все мои надежды пошли прахом на этапе скиннинга, не умею я скинить, то ли руки кривые, то ли руки кривые. Одно из двух. Помогите, плз! Не оставьте меня рыдать над моделью в максе. Я, вот, ещё поковырялась, удалось отскинить только перчатки (они длинные, почти во всю руку). Остальное – слёзы. Даже боты, которые почти в облипку, только внизу он огромный, не хотят нормально скинится: как только начинаю двигать кости, сапог, вроде, и едет за костью, но, при этом, его трясёт и колбасит, и фиг знает отчего. Я уже молчу про то, что там изображает нижнюю часть брони, которая довольно далеко местами отходит от тела, плюс там ещё есть части, которые болтаются посередине, с ними вообще беда. Я даже деформировала тушку, чтоб она как бы заполняла нижнюю часть, но результат, всё равно, плачевный. В общем, хелп!
Koxae, скинить, это не значит двигать кости! Это привязка одежды под ДАННЫЙ скелет. Сначала броня должна подгоняться под тело, а потом привязываться к костям. Иногда достаточно автоматической привязки, иногда требуется ручная работа. Где броня, о которой идёт речь? Надо же увидеть, стоит ли за неё браться. Если и буду подгонять, то сначала под DG и UNP. Если получится без больших затрат сил, то могу и и под CBBE попробовать, но для этого нужно тело и его скелет. Там ванильный?
Для тех кому лень устанавливать сторонние программы или долго писать путь к файлу - можно скопировать программу cmd.exe из папки System32 (в C:\\Windows\) и вставить в ту же папку, где находится ваша программа. И тогда при запуске командной строки у вас сразу же будет выбрана данная папка и можно будет спокойно запустить файл SkinInjecror.exe (или вообще любую программу в данной папке)
Добрый день! Есть тут кто живой? Искал уроки по скиннингу и наткнулся на эту страничку. Заинтересовало, но все ссылки на эти програмки битые. Ничего не могу скачать. Везде пишет, что такой страницы не существует. Нельзя ли перезалить, пли-из!?
На Нексусе лежит набор всех иструментов, которые я делал. Там есть и этот. Иструкции внутри архива имеются. Называется: "ToolsPack to work with Blender 2.7"