Данный "гайд" написан по принципу "от чайника для чайников" и "от и до". Когда-то, несколько лет т.н. мне понадобилось поменять UV-карты нескольких предметов в Блендере, которым я не владел и который мне вовсе не хотелось изучать. Я просто хотел поменять UV-карты, нет, не моделлить, не учиться делать развертку с нуля, а просто поменять UV-карты. Но ни один гайд в инете мне в этом не помог, и в итоге я долгими часами по кусочкам искал ту или информацию о том, как загрузить предметы в Блендер, как открыть UV-карту, как ее отредактировать, как выгрузить предмет и что делать, когда вот тут и вот здесь не хочет работать.
Почему именно смена UV-карт? Для меня, как для полного нуля во всем, что связано с художеством, это стало неплохим средством "создания" новых предметов. Берешь текстуру от одного предмета, натягиваешь на другой: бац, у нас новый предмет. С простыми моделями (колчаны, оружие, ножны и пр.) это прокатывает довольно неплохо, с более сложными (доспехи) это провернуть гораздо труднее, но порой более-менее реально, если не сильно придираться к результату (хотя, как правило, в случае с доспехами все же не обойтись без какого-никакого редактирования самой модели). Например:
Или недавний пример с колчанами: вот есть в РоР красивый топовый доспех, и щит к нему, и поножи, и шлем, и топорик, в общем почти полный комплект, но стрел и болтов нет. Не проблема: можно взять и за несколько минут сделать:
Часть 1. Нахождение нужных исходников.
Модели в M&B хранятся в .brf архивах, с которыми можно работать при помощи программы OpenBrf - штуки, на самом деле, невероятно мощной, способной заменить многие функции 3d редактора, причем автоматизированно, всего парой кликов.
Как с ней работать в общем и целом - для этого есть другие гайды, здесь же будем действовать "от и до" на примере случая с колчанами.
1. Вот в игре у вас есть доспех, чьей текстурой вы хотите "воспользоваться" и есть ненужный колчан, чью текстуру вы решили заменить. Для этого заходите в папку с модом, открываете item_kinds1.txt и ищете оба предмета по оригинальному названию (если установлен русик - временно смените язык обратно на анг. и посмотрите ориг. названия).
В нашем случае мы решили заменить Basic Bolts (Basic_Bolts), у которых, соответственно:
itm_bolts Basic_Bolts Basic_Bolts 5 bolt 0 flying_missile 2305843009213693952 bolt_bag 3458764513820540928 bolt_bag_b 3458768911867052032 bolt_bag_b 1152921504606846976 16875526 1879048192 200 4398046511112 2.000000 100 0 0 0 0 0 0 0 63 45 261 0
bolt - название меша самого болта
bolt_bag и bolt_bag_b - названия мешей колчанов в зависимости от размера колчана в игре, для простоты заменим их на одно и то же.
А в качестве "донора" берем доспех Supreme Asp Armor (Supreme_Asp_Armor), которому, как мы видим, соответствует меш pa_pop_armor_24_asp_supreme:
itm_asp_plate_supreme Supreme_Asp_Armor Supreme_Asp_Armor 1 pa_pop_armor_24_asp_supreme 0 16781325 0 29022 973078948 22.000000 1 3 64 24 27 0 0 0 0 0 0 0
2. Теперь, когда у нас есть названия меша "донора", открываем любой .brf архив в моде с помощью OpenBrf, нажимаем CTRL+F, вбиваем в поиск имя нужного меша и когда поиск нам его находит, кликаем по нему:
(да не смутят вас lod-ы - уровни детализации и всякие .1 .2 .3 или .a .b .c или прочие - составные части мульти-меша).
После чего, найдя меш, отслеживаем по нему путь к материалу и, соответственно, текстуре DiffuseA (точно так же - через поиск):
Саму текстуру ищем в папке Textures мода.
3. Далее, сам предмет (bolt_bag в нашем случае). Точно так же через поиск находим его и кликаем по нему правой кнопкой мыши. Смотрим, что нам предлагают:
Варианта экспорта может быть 3:
- export skinned mesh (доспех, поножи, маунт, иногда шлем) - если такой вариант имеется, используем именно его. Экспортирует предмет в формате .smd.
- export static mesh (болт, стрела, любое холодное оружие, перчатка, иногда щит, как правило шлем) - экспортирует предмет в формате .obj.
- export vertex ani (луки, арбалеты, колчаны, ножны, часто щиты) - самый проблемный случай. О том, что объект является вертексной анимацией, говорит также появление доп. кнопочек с фреймами, когда вы выделяете данный объект в Openbrf.
Вертексная анимация - это когда объект состоит из нескольких мешей, имеющих идентичную структуру (1-в-1 количество граней, вершин, ребер), но, как правило, разное расположение в пространстве. Так, ножны - вертексная анимация, где 1 фрейм являет собой видимый меч в ножнах, а другой фрейм - на, первый взгляд, пустые ножны, но, на самом деле, меч все еще там, просто он был уменьшен до микроскопических размеров.
Если предмет - вертексная анимация, то экспортируем мы его как .obj (то есть static mesh). А далее вариантов будет 3:
- или вы отредактируете его очень аккуратно, после чего используете специальный copy-paste перенос в OpenBrf,
- или вы должны будете экспортировать все фреймы и отредактировать каждый из них;
- или вы должны будете отредактировать его единожды, но потом воспроизвести все позиции вертексной анимации.
Первый вариант самый простой, 2 и 3 трудоемкие и требуют по-новой собрать анимацию из фреймов (импортировав все измененные меши, выделив их в правильном порядке, кликнув GRV =>"merge as frames in a vertex ani" и верно проставив тайминг фреймов в собранной анимации (там, где те самые новые кнопочки с пред. скрина)), поэтому к ним стараемся не прибегать.
Поскольку колчан с болтами - вертексная анимация, экспортируем как .obj.
Отдельное замечание по лошадям: перед тем, как их экспортировать, обязательно поменайте анимацию на anim_horse и скелет на skel_horse:
Часть 2. Начало работы в Blender-е, импорт предметов в Blender.
1. Открываем Blender. Ужасаемся числу всяких кнопочек и циферок.
2. Смотрим вот это короткое видео:
где рассказывается, как установить плагин для импорта .smd файлов.
Даже если вам сейчас не нужен плагин для .smd файлов, все равно смотрим, т.к. там рассказывается, как сохранять startup file.
2.1. Для упрощения все дальнейшей работы сразу же создаем себе нормальный startup file (уже настроив путь для экспорта .smd файлов).
Во-первых, кликаем по кубику в центру и delete его.
Во-вторых, хватаем и тянем за вот этот полосатый уголок (там, где красная стрелка на скрине):
У нас должно открыться еще одно "под-окно". Его сразу же переводим в режим UV/image Editor:
Наконец, в 3D окне в районе нулевых координат и несколько выше не будет лишним понатыкать точек света типа area, чтобы лучше видеть. Но это можно сделать уже после, когда вы импортируете предметы и посмотрите, где они располагаются (импортировали доспех, понатыкали ламп, удалили доспех и скелет, сохранили startup file).
В конце сохраняем startup файл, чтобы каждый раз при старте Блендера вы выдели примерно то, что на предыдущем скрине (не считая развернутого меню с лампами).
3. Импортируем наш меш, будь то .obj или .smd:
При импорте .obj обязательно нажмите на "Keep Vert Order" в настройках импорта слева внизу:
Это (а также правильный экспорт) позволят вам корректно использовать продвинутые функции копи-паста в Opebrf.
4. После того, как объект импортирован, он по умолчанию должен быть выделен. Если нет, выделите его, кликнув по нему ПКМ.
Потом нажмите на Num Del (Del на цифровой раскладке клавы) чтобы центрировать его по центру 3D экрана.
Вращается экран при помощи движений мышью в разные стороны при зажатом колесике (а в окне UV Editor-а тот же метод используется для движения вправо-влево, вверх-вниз).
Если зажать и левый Shift, и колесико, можно перемещать камеру взад и вперед.
Наконец, если нажать Shift+F, камера перейдет в летающий режим, где вы можете ориентироваться с помощью клавиш WASD. Найдя удобную точку, закрепите позицию, нажав Enter.
Ну и вращайте колесико туда-сюда для приближения-удаления.
Это, по сути, все что вам нужно для работы с камерой.
Если на вашей мыши есть доп. кнопка рядом с колесиком, очень удобно назначить ей функцию, идентичную нажатию на колесико, и использовать ее вместо колесика для зажатий.
5. Выделенный меш переводим в Edit Mode:
Как только вы это сделаете, справа в UV редакторе появится разверстка.
Если же по какой-то причине она не появилась (почему-то ваш предмет не выделен в Edit Mode), просто нажмите A для выделения всего, держа указатель мыши в 3D окне. Эта же клавиша используется для снятия выделения.
6. После этого в UV окне нажмите на кнопку Open либо Image - Open Image:
Специально обращаю внимание на второй вариант, т.к. в том меню после открытия изображения появятся другие полезные функции вроде обновления (reload) изображения.
После чего найдите нужную вам "донорскую" текстуру (либо для начала найдите нормальную текстуру и посмотрите, какая часть UV-карты к чему привязана - что, например, вон там за какие-то полосочки) и откройте ее.
Часть 3. Редактирование UV-карты.
1. Что есть что и выделение.
UV-карта - это то, какие грани модели как привязаны к каким точкам текстуры. У граней, соответственно, есть ребра и вершины, а в Blender-е есть 3 разных режима выделения (как в 3D окне, так и в UV окне):
От того, какой режим вы используте, зависит то, что именно "цепляет" ваша мышь при выделении (ПКМ), перетаскивании и т.п. Иногда проще цепляться за грани, иногда за ребра, иногда за вершины.
В UV редакторе также есть четвертый режим - острова (сразу справа от режима граней), который "подхватывает" целостные участки UV-карты. Или, как вариант, можно использовать клавишу L из любого другого режима: навели указатель мыши на целевой объект в рамках нужного островка (т.е. на любую грань при включенном режиме граней и т.д.), нажали L.
Также под окном UV редактора сразу слева от режимов выделения есть вкл/выкл кнопка синхронизации выделения в окне 3D и UV, иногда полезная.
Чтобы добавлять/удалять участки из текущего выделения, держите зажатым Shift. То бишь: зажали Shift, кликнули на одну вершину (при режиме выделения = вершины), кликнули на другую, кликнули на третью и т.д.
Также можно использовать лассо: зажмите левый Ctrl, обведите нужный участок, разожмите. Чтобы снять выделение с помощью лассо с участка карты, держите одновременно зажатыми Ctrl и Shift.
Частичная альтернатива лассо - выделение прямоугольной область при помощи клавиши B. Нажали B, зажали ЛКМ, протянули, разжали.
CTRL+I позволяет вам инвертировать выделение (выделенное станет невыделенным, невыделенное выделенным).
Наконец, клавиша H позволит вам скрыть выделенный участок. Это удобно, когда куча граней/островков налеплена на один и тот же кусок текстуры и становится невозможно работать. Сочетание Alt+H снова делает все сокрытое видимым.
Клавиша А, как и в 3D режиме до этого, позволяет выделить все.
2. Редактирование.
Итак, выбрали вы. скажем, режим островков, уцепились (ПКМ) за самый жирный "остров" (основная часть колчана) и хотите его куда-то перетащить или изменить его размер и т.п. Для этого есть следующие клавиши:
S - смена размера. Нажали S, подвигали мышкой, нашли устраивающий нас размер и положение (с помощью кнопки смены размера можно также отразить объект по вертикали и/или горизонтали) и закрепили результат нажатием на левую кнопку мыши (или сбросили щелчком на правую).
Прим. 1.: Если вам не нравится произвольная смена размера, временно включите "магнитик" (справа от режимов выделения), нажав на него (он станет цветным). Тогда размер будет меняться ровными значениями - 90%, 80%, 70% и т.д.
Прим. 2: Если вам надо изменить размер только одного измерения, то после нажатия S нажмите X или Y - это позволит вам растянуть или сжать участок UV карты только по горизонтали или только по вертикали.
Прим. 3: Если вам по той или иной причине нужно четкое значение (например, вы редактировали еще и текстуру, где уменьшили деталь до 73% от оригинала), то после нажатия S (а также опционально X или Y) просто введите в пустоту коэффициент (0.73 в нашем примере) и подтвердите его нажатием на Enter/ЛКМ.
G - перетаскивание. Нажали G, передвинули мышью участок (или отдельные вершины/ребра/грани), закрепили результат щелчком ЛКМ (или сбросили щелчком ПКМ).
Примечания 1-2-3 из пред. пункта точно так же применяются и к G (магнит для смещения на ровные значения, X или Y для смещения строго вдоль определенной оси, ручной ввод чисел для точного смещения).
R - вращение. Нажали R, повращали, закрепили результат щелчком ЛКМ (или сбросили щелчком ПКМ).
Примечание 1 и 3 из пред-пред. пункта опыть применяются и здесь (магнит для вращения на ровное число градусов и ручной ввод градусов для точного вращения).
Y - разрез. Если по той или иной причине вы хотите вырезать часть граней из большого островка (чтобы, скажем, перенести их на один участок текстуры, а все остальное - на другой), выделите их и кликните Y. Это отрежет выделенный кусок от остального острова.
Примечание: настоятельно не рекомендуется делать этого с мешами из вертексных анимаций, если только вы не хотите избрать длинный путь их импорта (методы 2 или 3).
Чтобы снова приклеить участок, выделяем поочередно все пары вершин, жмем на W - Weld.
Ctrl+Z - отменить действие, Ctrl+Shift+Z (вместо привычного Ctrl+Y) - вернуть действие.
Само редактирование - процесс творческий, но старайтесь двигаться от крупного к мелкому. Сначала перетащите весь островок на подходящий участок текстуры, потом, скажем, чуть-чуть уменьшите его, если он не влезает, повращайте, чтобы все смотрелось ровно, а уже под конец можно подредактировать положение отдельных ребер/вершин (но следите по 3D окну, чтобы растяжения/сжатия отдельных участков были не сильно заметны).
UV-карта колчана для болтов, например, была в итоге мною размещена следующим образом:
Часть 4. Экспорт из Blender-а, импорт в Openbrf.
1. Экспорт из Blender-а.
.smd, если они у вас были настроены в пункте 2 части 2, экспортируются легко. Кнопка экспорта там же, где кнопка импорта, только на позицию ниже (File => Export).
.obj экспортируются чуть дольше. Выберите путь, выберите имя файла и не забудьте снять галочку с "Write Materials" и поставить галочку на "Keep Vertex Order":
К сожалению, насколько мне известно, эти 2 галочки невозможно сохранить в качестве настроек startup файла, т.ч. приходится кликать по ним каждый раз.
2. Импорт в Openbrf.
Самый наилучший способ таков: открываете файл с моделью, которую вы редактировали, импортируете отредактированный меш (наверху Import => Static mesh или Skinned mesh), после чего для отредактированной модели кликаете (опять сверху) Copy, а для старой модели в архиве - Paste texture coords:
После чего меняете название материала старой модели на "донорский", который вы узнали в самом начале работы, удаляете импортированный меш, а по старому, если у донорского материала есть normalmap
(как тут - pa_pop_armor_48_n)
кликаете ПКМ => recompute tangent dirs. Сохраняете файл.
Но этот метод применим лишь тогда, когда вы сохраняли vertex order (для .obj) и ничего не резали, иначе у вас текстуры поедут.
В противном случае кликаете по старой модели ПКМ => Reimport mesh и импортируете вместо нее вашу отредактированную. После чего опять ПКМ и recompute tangent dirs. Сохраянете файл.
Перед recompute tangent dirs еще можно (иногда очень желательно, иногда наоборот) проделать ПКМ => recompute normals - ползунок в самый верх, а вот положение галочки (поставлена или нет) - зависит от модели, иногда лучше так, иногда лучше этак. Смотрите сами по визуальному результату, стоит ли проделывать этот шаг.
3. Нюансы импорта.
Во-первых, вы сами решаете, как реализовать подмену. Вы можете просто заменить модель на саму себя (только обновленную), а можете оставить старую модель (а вдруг она еще где-то используется), а вашу обновленную добавить под новым именем и на это же имя исправить название модели в item_kinds1.
Во-вторых, текстура и материал должны грузиться перед загрузкой модели, а это значит, что в очередности загрузки .brf-файлов в module.ini мода сначала должен идти файл с донорским материалом, а потом файл с вашей моделью (что я не советую редактировать, ибо есть риск нарушить последовательности для других предметов) ЛИБО вам надо перенести модель в файл с донорским материалом (используйте опции copy-paste, как выше при импорте).
В-третьих, уровни детализации (lod-ы: lod1, lod2, lod3, lod4). Если вы оставите старые, то вблизи ваш предмет будет выглядеть по-новому, но вдали при отдалении обретать старый облик. Если вы их просто удалите, это тоже вариант, но он снизит производительность в игре. Вы также можете переделать каждый из них вручную, как вы переделали основную модель: в этом плане они ничем не отличаются (разве что иногда в последних лодах - вроде 3 и 4 - вертексную анимацию заменяют на обычный однофреймовый static mesh). Наконец, если только это не вертексная анимация, вы можете удалить старые и сгенерировать новые (ПКМ => compute lods, также в Settings => On building LOD pyramids вы можете настроить проценты (от числа граней основной модели) которые составляет каждый генерируемый Openbrf-ом lod).