[гайд] Конвертация транспорта в Transport Fever

Alex
Автор: Alex в Моддинг,
Итак, пришло время! Здесь я начну писать гайд по конвертации 3D модели транспортного средства Transport Fever. Для примера я возьму автомотрису РА1, автором которой является Old. Это позволит мне описать все основные процессы конвертации модели, которые понадобятся вам при конвертации любого типа транспортного средства. В первую очередь я крайне рекомендую прочитать гайд по конвертации моделей в Train Fever от Omich'а.
В своём гайде Omich подробно описывает структуру папок, можно найти пример скриптов с комментариями и ещё много всего полезного. По большей части по этому гайду можно и научиться конвертировать модели, исключение составляют только текстуры, так как именно они в Transport Fever отличаются. Но так как вопросы по конвертации возникают уже довольно часто (и это хорошо, ведь я один не могу конвертить весь транспорт) в этом гайде я опишу те действия, которые делаю я. Так как я ленивая жопа, я расскажу в первую очередь о том, как конвертировать модель максимально быстро (но это всё равно займёт много времени). Ещё скачайте вот этот архив. В нём 3 необходимые для конвертации программы: TFID показывает ID элементов готовой модели, TFMV - вьювер, в котором можно просматривать модель и её детали, TFMC - конвертер, который пригодится нам в первую очередь. TF2_convert_guide_programs.zip А ещё установите Notepad++ и при редактировании файлов игры включайте синтаксис Lua. Это позволит проще разбираться в коде, а ещё в Notepad++ есть подсветка открывающих и закрывающих скобок\кавычек, что КРАЙНЕ важно. Итак поехали.   Часть 1: О модели Здесь я не буду рассказывать о том, как создавать модели: для этого существуют соответствующие специализированные гайды и уроки по работе с 3D-редакторами. Я же скажу о главных требованиях к моделям: 1. В игре используются low-poly (низкополигональные) модели. Само понятие "низкополигональная модель" в последние годы ооочень сильно растянулось, но в нашем случае "лоу поли" означает до 25-30 тысяч треугольников (не полигонов, обратите внимание) в сложных детализированных моделях (как паровозы). В более простых моделях желательно не выходить за рамки 10-15 тысяч треугольников. В любом случае помимо основной модели нам потребуются лоды (LOD -  Level of Details), то есть упрощённые варианты модели. Обычно их два, дальность подгрузки лодов определяется в скрипте модели. 2. Желательно чтобы вся модель (за исключением салона, если такой есть) имела одну текстуру и один материал. Это очень упростит жизнь в будущем. 3. Исходя из п.2, очень желательно, чтобы салон транспортного средства имел отдельную текстуру. 4. Все подвижные части модели должны быть отделены друг от друга. Все неподвижные части должны быть объединены (саттачены, от англ. Attach) в один меш. 5. Крайне желательно, чтобы на развёртке было как можно меньше перекрытий. Это нужно для последующей качественной генерации текстур грязи и ржавчины, а также для рендера качественной текстуры Ambient Occlusion. Кстати, если вы уже умеете рендерить AO - сделайте это сейчас, пригодится. Если нет - почитайте, как это делается. Жить без этого можно, но лишним оно тут не будет. 6. Также крайне желательно, чтобы у модели были PBR-текстуры. На этом моменте я посоветовал бы всем, кто интересуется моддингом Transport Fever пойти и изучить, что такое PBR, а также программы Quixel Suite и\или Substance Painter. Это очень пригодится вам в будущем, особенно если вы в принципе занимаетесь 3D-моделированием. В этом гайде я буду рассказывать о модели без PBR-текстур, но именно за такими текстурами будущее и именно их Transport Fever "ест" лучше всего. 7. Если вы ни разу не слышали о PBR-текстурах и ваша текстурка нарисована в фш при помощи фототекстур - ничего страшного, именно такую модель я буду конвертить в гайде. Если текстуру вы рисовали в пейнте - будем считать, что это только для теста, окей? 8. Убедитесь, что настройки сцены в 3DsMAX выглядят таким образом: В игре используются реальные размеры модели.   9. Все детали модели, которые будут конвертироваться, для удобства должны быть названы соответствующим образом. Учитывайте, что если элементы модели дублируются, то скорее всего можно будет сконвертить только одну копию (одну тележку, одну колёсную пару и т.д.). Об этом ещё напишу. Для удобства я предлагаю следующий формат названия деталей модели: model_body_lod0 - основной лод кузова модели
model_interior_lod0 - основной лод салона модели
model_bogie_lod0 - основной лод тележки
model_w_lod0 - основной лод колёсной пары И так далее. Обратите внимание, что чтобы избежать проблем с регистрозависимыми платформами (например, Linux), названия всех мешей, файлов и папок в модели следует писать маленькими буквами.   10. Анимация дверей (и других элементов при необходимости) делается при помощи обычных ключей. От этой анимации нам потом пригодятся только координаты положения пивота в определённые моменты времени (в миллисекундах), обычно достаточно 3-4 ключей.   11. Разрешение текстур. Текстуры должны быть квадратными (со сторонами, кратными 512) или прямоугольными с соотношением сторон 1:2. Для транспорта допустимо и вполне оптимально разрешение текстур 2048х2048, однако если у вас небольшая модель и текстуры будут качественно смотреться при меньшем разрешении - можно делать и меньше.   Ну, и познакомьтесь с нашим сегодняшним поциентом: РА1 от Old'а     Часть 2: Структура модели в игре Почитать о всех файлах и папках, из которых состоят модели в Transport Fever, можно в гайде от Omich'а. Здесь же я опишу только то, что пригодится мне при конверте РА1 и других транспортных средств. Содержимое папки res таково: models group/vehicle/train - здесь лежат группы мешей (обычно в группы объединяются, например, тележки) material/vehicle/train - здесь лежат .mtl-файлы материала, в которых есть ссылки на файлы текстур mesh/vehicle/train - здесь лежат .msh-файлы модели, в которых есть ссылка на .mtl-файл, а также .msh.blob - сам файл модели model/vehicle/train - здесь лежит .mdl-файл, в котором собирается вся модель textures models/vehicle/train - здесь лежат .dds-файлы текстур, на которые ссылаются .mtl-файлы ui models_20/vehicle/train - здесь лежат .tga-файлы иконок транспорта на линии models_small/vehicle/train - а здесь - .tga-файлы иконок транспорта в депо Ещё тут может быть папка audio со звуковыми эффектами и config, в которой настраиваются эти звуковые эффекты и собирается моторвагонный п\с или составы, но о них - позже. Обратите внимание, что вместо /train, которое означает "поезд" здесь может быть: truck (грузовики), bus (автобусы), tram (трамваи), waggon (вагоны), plane (самолёты), ship (корабли). Теперь же можно приступить непосредственно к конвертации модели.   Часть 3: Подготовка модели к конвертации Первым делом смотрим, из чего состоит наша модель. В данном случае это кузов, салон, 4 створки двери, 2 телеги и 4 колёсные пары.   Сразу думаем, где можно схитрить с анимированными частями (дверьми). Про саму анимацию я расскажу позже, на данном этапе нам просто нужно иметь в виду, какие элементы будут анимироваться.
Так вот, конвертить их по одной и прописывать каждой анимацию - это очень муторно и долго. От этого никуда не деться, если у вашей модели ширмовые двери, расположенные под разными углами (например, как у Татры Т3), однако в данном случае всё проще. Двери здесь выхоят из проёма наружу и затем раздвигаются в стороны. Попарно анимация идентична. И это значит, что мы можем объединить в один меш (саттачить) "передние" и "задние" створки обеих дверей с каждой стороны:   Теперь, как я писал в п.1, все меши нужно назвать так, чтобы с ними было удобно работать далее. Мы будем конвертировать 4 меша дверей, 1 меш кузова, 1 меш салона, 1 меш телеги и 1 меш колёсной пары. У меня список получается вот такой:   Дальше на очереди - пивот (Pivot point). Именно координаты пивотов после будут указывается в .mdl-файле модели (а также в .grp), когда мы будем собирать её. Но сейчас нам нужно перевести модель в игровой формат. Если что, кнопки для управления пивотом находятся вот здесь:   У кузова и салона пивот должен быть в 0 координате.
Для тележки жмём "Center to object", затем убираем "Affect Pivot Only"  и передвигаем телегу в центр сцены (но не трогаем её высоту).
Для колеса включаем управление пивотом, затем тоже "Center to object" и отключаем "Affect Pivot Only". После этого переносим колёсную пару в 0 координату. В итоге у нас получается как-то так:   Для дверей всё зависит от типа их анимации. Если двери просто перемещаются вдоль кузова, их пивот можно не трогать (или установить его в 0 координату, если это не так). В данном случае я оставляю так. Если анимация дверей более сложная и пивот находится внутри меша - дверь, не трогая пивот, необходимо расположить в 0 координате по продольной и поперечной оси, но оставить на той же высоте, где она есть (как телегу). Всё, здесь всё готово к конвертации модели в игровой формат.     Часть 4: скрипт-конвертер Когда-то давно всё это делалось вручную, но сейчас у нас есть замечательный скрипт, который написал MrIgr. Вот код скрипта с комментариями: --export selection2 obj_folder = "F:\\Games\\Train Fever\\TFMM\\povozka\\obj\\" -- папка для экспортируемых obj-файлов (любая, но она должна существовать) tfmc_folder = "F:\\Games\\Train Fever\\TFMM\\" -- папка с TFMC project_name = "povozka.bat" -- имя проекта (любое) project_folder = "D:\\Games\\SteamLibrary\\steamapps\\common\\Transport Fever\\mods\\P36\\res\\models\\mesh\\vehicle\\train\\p36\\" -- папка, куда следует поместить msh-файлы. Она должна существовать! path_to_material = "vehicle/train/p36int.mtl" -- расположение материала out_file = createfile (tfmc_folder + project_name) for i in selection do ( format "\"%TFMC\" -i \"%%.obj\" -o \"%%.msh\"\n" tfmc_folder obj_folder i.name project_folder i.name to: out_file ) for i in selection do ( format "\"%replace.cmd\" /from:\"(materials = \{ \u0022)[^\u0022]*\" /to:\"$1%\" \"%%.msh\" " tfmc_folder path_to_material project_folder i.name to: out_file ) close out_file for obj in geometry do ( select obj exportFile (obj_folder + (obj.name as string) + ".obj") #noPrompt selectedOnly: true ) shellLaunch (tfmc_folder + project_name)""   Как видите, до этого гайда я конвертил П36   Соответственно, вам необходимо заменить пути в первых строчках на свои. В строке tfmc_folder нужно указать папку, где у вас лежит TFMC, который вы можете найти в архиве в начале гайда. Готовые .msh-файлы можно положить в абсолютно любую папку, чтобы скопировать в папку модели позже. В строке path_to_material указывается путь к .mtl-файлу в таком виде, каким он будет в .msh-файлах. Так как у нас салон использует другую текстуру и, соответственно, другой .mtl-файл, это нужно будет потом вручную исправить (об этом я напомню ниже). Пока же правим пути в скрипте, затем идём в 3Ds MAX, выделяем все конвертируемые детали модели и жмём там F11. В появившееся окно копируем скрипт, выделяем его (Ctrl+A) и жмём Enter на доп. клавиатуре.   После этого, если все пути написаны верно, начнётся конвертация. В процессе появится окно командной строки (это TFMC), где после [Done] нужно будет нажимать Enter на доп.клавиатуре (столько раз, сколько деталей конвертируется).   Если вдруг появятся какие-то проблемы - внимательно читайте, что написано в командной строке. Скорее всего, проблема из-за неверного написания пути. Когда всё будет готово, можно зайти в папку, указанную в скрипте, и увидеть набор файлов .msh и .msh.blob.  Файлы .msh открываются при помощи текстового редактора (лучше всего использовать Notepad++). Здесь нужно открыть пару файлов и убедиться в том, что путь к материалу на месте. Если это не так (иногда почему-то скрипт его не прописывает) - его нужно указать вручную. Кроме того, здесь нужно изменить путь к материалу у тех файлов, которые используют отличную от других деталей текстуру (в нашем случае это салон):   Аналогично нужно будет поступить с лодами и этот этап завершён.   Часть 5: Копировать\переименовать\исправить Пришло время собирать  всё это в игровую модификацию. Здесь можно создавать папки с нуля и писать все скрипты, но я, естественно, таким не занимаюсь. Я просто беру уже существующую модель того же типа (train для локомотива, waggon для вагона, bus для автобуса и т.д.), копирую её в Transport Fever\mods и переименовываю. В данном случае "донором" у нас станет ЧМЭ3. Вы можете взять любую подходящую модель даже из Train Fever.  Итак: копировать\вставить\переименовать:   5.1. Тележки Если тележек в вашей модели нет (например, у вас двухосный вагон) - этот пункт можно пропустить. Заходим в папку, проходим в \res\models\group\vehicle\train (на папки audio и config, если они есть, пока не обращаем внимания). Здесь мы сразу 3 файла с тележками от чмухи. Лоды я пока что уберу, т.к. их вы можете и сами сконвертировать по аналогии. Пока что займёмся основной моделью. На эти .grp-файлы позже будет ссылаться .mdl-файл модели. В них содержится ссылка на меши тележки и колёс, но об этом ниже. Итак, переименовываем файл из chme3_lod_0_bogie.grp в ra1_lod_0_bogie.grp (чтобы упростить себе жизнь в дальнейшем я настоятельно рекомендую при переименовании файлов менять только название транспортного средства). Открываем файл в Notepad++. Здесь мы видим, как я написал выше, ссылки на меши тележки и колёс, а также их координаты. Для начала переименуем всё (обратите внимание на названия мешей, они должны быть такими же, как у ваших .msh файлов, которые были получены после конвертации). Если в вашей тележке меньше осей, удалите один из блоков, но осторожно! Не растеряйте запятые. В итоге у меня получилось так:   Дальше - координаты, я выделил их выше. Эти три числа - координаты колёсной пары в Максе при учёте, что сама тележка находится в 0. Здесь первая - продольная координата (Y), вторая - поперечная (X), и третяя - вертикальная (Z). Идём в Макс, выставляем колёса на места и смотрим: Аналогично со вторым колесом (не забудьте пивоту колёсных пар сделать Center to Object), и вписываем эти координаты в наш .grp-файл.   Тут готово.   5.2. Материалы Переходим в \res\models\material\vehicle\train. Здесь у меня лежат два .mtl-файла: один отвечает за текстуры основной модели, второй - за текстуры салона. Это уже материалы именно от Transport Fever, поэтому если вы в качестве "донора" выбрали модель из Train Fever, тут вам стоит сходить в папку Transport Fever и стащить оттуда пару .mtl-файлов. Переименуйте их соответственно тому, что указывали при конвертации .msh-файлов и внутри них. Открываем первый при помощи всё того же Notepad++: Видим здесь много настроек, с которыми я, увы, не разбирался. Меня тут больше всего интересуют ссылки на текстуры модели. Как и в случае с тележками, просто заменяем все "chme3" на "ra1". Если вы пропустили пункт про тележки, я повторю здесь: Чтобы упростить себе жизнь в дальнейшем я настоятельно рекомендую при переименовании файлов менять только название транспортного средства. Здесь у нас будет 4 ссылки на текстуры. Повторяем то же с файлом для салона - там будет только одна ссылка. Идём дальше.   5.3. Меши Наш следующий пункт назначения - папка \res\models\mesh\vehicle\train\chme3, которую необходимо переименовать в то, что нужно нам (помните, что все переименования должны быть аналогичны: в данном примере я переименовываю все chme3 в ra1 - поступайте аналогично) и полностью очистить от содержимого. Сюда копируем наши .msh-файлы, которые мы получили на 4 этапе конвертации.   Здесь всё довольно быстро. На самом деле, на этом этапе в меши нужно вписать анимацию, но блок об этом я добавлю сюда позже.   5.4. Собираем модель Наконец, переходим в папку \res\models\model\vehicle\train. Удаляем всё лишнее (если есть), оставляем только один .msh-файл и переименовываем его. В моём случае остался файл chme3a.mdl, но я его переименую просто в ra1.mdl. На этот файл ничего не ссылается, однако точно так же должны будут называться иконки. Открываем .mdl-файл. Это основной файл модели, где содержится вся информация о ней, а также ссылка на меши и группы. Почитать о структуре этого файла вы можете в п2. гайда от Omich'а. Я же пройдусь по самому необходимому. Алгоритм действий здесь таков: Переименовываем все файлы и папки (в моём случае это всё то же: все chme3 переименовать в ra1). ВНИМАТЕЛЬНО! Внимательно проследите соответствие всех ссылок на меши и группы и их названий в папках! Изменяем координаты в строках 5 и 8. Здесь указываются крайние точки модели: продольная, поперечная и вертикальная координаты. В разделе children находятся блоки со ссылками на меши и группы. Удаляем лишнее (если есть) и добавляем нужное (если нету). В моём случае этот блок выглядит так: children = { { id = "vehicle/train/ra1/ra1_body_lod0.msh", transf = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, }, type = "MESH", }, { id = "vehicle/train/ra1/ra1_door1l_lod0.msh", transf = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, }, type = "MESH", }, { id = "vehicle/train/ra1/ra1_door2l_lod0.msh", transf = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, }, type = "MESH", }, { id = "vehicle/train/ra1/ra1_door1r_lod0.msh", transf = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, }, type = "MESH", }, { id = "vehicle/train/ra1/ra1_door1r_lod0.msh", transf = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, }, type = "MESH", },{ id = "vehicle/train/ra1_lod_0_bogie.grp", transf = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4.26445, 0, 0, 1, }, type = "GROUP", }, { id = "vehicle/train/ra1_lod_0_bogie.grp", transf = { -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -4.26535, 0, 0, 1, }, type = "GROUP", }, { id = "vehicle/driver_static/lod_0_driver_static.msh", transf = { 1.0, 0, 0, 0, 0, 1.0, 0, 0, 0, 0, 1.0, 0, 0.00, -1.7, 1.727, 1, }, type = "MESH", },{ id = "vehicle/train/ra1/ra1a_interior_lod0.msh", transf = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, }, type = "MESH", }, },   Обратите внимание: в массиве чисел, который есть в каждом блоке, три последних числа до единицы - это координаты пивота меша. Здесь всё аналогично редактированию .grp-файлов тележек, за одним исключением: сначала в сцене нужно расставить все меши так, как они должны быть в игре, а затем тут указывать координаты их пивотов.  В моём случае это необходимо только для тележек. Если, как я и писал, вы не изменяли высоту тележки перед импортом, то вам необходимо вписать здесь только продольную координату (при конвертации все пивоты сбрасываются в 0 сцены).   Если в вашей модели нет тележек, то здесь просто указываются ссылки на .msh-файлы колёсных пар и их координаты (а вот чтобы увидеть инфу про координаты колёс вам придётся вернуться на пункт 5.1. про тележки )   Здесь же указывается положение машиниста (его вы можете увидеть на скриншоте под блоками с тележками). Однако тут есть 2 варианта: либо писать координаты на глаз, так как у этого меша машиниста они смещены, либо просто удалить его отсюда и прописать машиниста в разделе для пассажиров, о котором я расскажу позже. В первом случае машинистом будет дедок, во втором - странного вида молодой (или не очень) человек, поэтому тут уж кому как больше нравится. В любом случае, пока что на это можно просто забить. Здесь же, кстати, нужно добавить блок с мешем салона. Для удобства просто копируем блок с вызовом меша кузова и меняем там название меша: Далее у нас идёт блок events.    Здесь всё как-то так:  events = { drive = { [2] = { -- порядковый номер анимируемого меша (можно посчитать вверху) forward = false, -- направление анимации name = "ventanim", -- имя анимации }, [3] = { forward = false, name = "ventanim", } }, },   Однако так как про анимации мы будем разговаривать позже, пока что всё содержимое блока events можно просто удалить (не удалите лишнюю скобку или запятую!).   Далее указывается расстояние, на котором подгружается лод. Это основной лод, поэтому он должен показываться с 0 метров до 100-200. Однако так как пока что это единственный наш лод, я укажу здесь 2000.   Блоки с остальными лодами пока что удалим.   И ещё раз:
БУДЬТЕ ВНИМАТЕЛЬНЫ при удалении или добавлении новых блоков. Если вы используете Notepad++, включите подсветку синтаксиса Lua (в верхнем меню выберите Синтаксисы - Lua) и внимательно следите за подсветкой скобок.   Далее - название, описание и характеристики. Обратите внимание, что в качестве цены и стоимости обслуживания необходимо указывать "-1", чтобы игра могла сама сбалансировать их. Внимательно следите за синтаксисом и правильностью растановки скобок и запятых! Чтобы закомментировать какую-нибудь строку (например, год выпуска, чтобы для теста транспорт выпускался бесконечно), нужно поставить перед ней два минуса:   В общем и целом, тут у нас всё.  Теперь можно запустить TFMV из архива, чтобы проверить, правильно ли собрана наша модель. Жмём Файл -> Открыть модель, ищем там .mdl-файл, открываем. Если модель не открывается и программа выдаёт ошибку - внимательно читаем её и идём править. Скорее всего, проблема в ссылке на несуществующий файл (ошибка в ссылке или названии файла) или в потерявшейся кавычке или скобке. Если открывается - оцениваем обстановку. Если все части модели (телеги\двери\салон\всётакое) на месте - отлично! Можем переходить к текстурам.     Часть 6: Текстуры Про текстуры более подробно я написал в этом небольшом гайде.  Теперь пройдёмся более предметно. Итак, переходим в папку \res\textures\models\vehicle\train. Если за шаблон вы взяли транспортное средство из Transport Fever, здесь вы увидите как минимум 4 файла текстур: model_albedo_opacity.dds, model_cblend_dirt_rust.dds, model_metal_gloss_ao.dds, model_nrml.dds, где model обычно - название модели транспортного средства. Кроме того, в случае наличия салона тут будет лежать файл model_interior_albedo_opacity.dds. Переименовываем эти файлы таким образом, чтобы они совпадали с тем, что мы писали в .mtl-файлах в пункте 5.2. У меня в итоге получилось так:   Открываем файлы! Первый у нас - model_albedo_opacity.dds. А, кстати: чтобы окрыть .dds-файл вам потребуется dds-плагин для Фотошоп от nVidia. При открытии файла появится диалоговое окно. Настройки в нём должны быть такие:   Файл model_albedo_opacity.dds, (а также аналогичная текстура салона - model_interior_albedo_opacity.dds)как следует из названия, содержит текстуры альбедо и прозрачности. Соответственно, если вы используете PBR-текстуры, сюда в основной канал нужно кинуть альбедо-текстуру, а в альфа-канал - прозрачность. Там белое непрозрачно, чёрное - прозрачно. Соответственно для эффекта стекла окна здесь должны быть нарисованы серым цветом.   Сохраняем этот файл с вот такими настройками:   Следующий на очереди - файл model_cblend_dirt_dust.dds. В нём содержится: Красный канал - ч\б текстура перекраски: чёрное перекрашивается в игре, белое - нет; Зелёный канал - ч\б текстура грязи: белое - грязно, чёрное - нет; Синий канал - ч\б текстура ржавчины: белое - ржавчина, чёрное - нет.   Так как в данный момент у нас нет текстур грязи и ржавчины (о том, как их делать при помощи программы Quixel Suite, я постараюсь рассказать в ближайшее врем), зелёный и синий канал просто закрашиваем чёрным. Текстуру перекраски мне подготовил Old, поэтому её я и положу в красный канал. Итого получается такая картина:   Обратите внимание на список каналов справа. Сохраняем эту текстуру с такими настройками:     Переходим к текстуре model_metall_gloss_ao.dds. Красный канал: если вы используете PBR-текстуры - положите сюда текстуру Metalness. Если нет - просто закрасьте чёрным.
Зелёный канал: если вы используете PBR текстуры - положите сюда текстуру Gloss. Если нет - придётся помучаться, о этом ниже.
Синий канал: сюда положите отрендеренную карту Ambient Occlusion. Если её нет - закрасьте канал белым.   Перейдём подробно к зелёному каналу и, соответственно, gloss-текстуре. Это текстура глянцевости, то есть белый цвет здесь будет означать абсолютно глянцевый и отражающий материал, чёрный - абсолютно матовый и неотражающий. Раз у вас нет отдельной Gloss-PBR-текстуры - мы просто положим в этот канал нашу альбедо (основную) текстуру. Только перед этим обязательно осветлите в неё окна, чтобы в игре стёкла получили отражения. Моно поиграться с яркостью и контрастностью. В итоге получается что-то вроде того:   Эту текстуру вполне можно использовать в игре, но обратите внимание, что это неправильный вариант. Нужно либо всё-таки учиться делать PBR-текстуры, либо подольше посидеть с переделкой альбедо в глосс. Например, по борту у нас идёт флаг России и при переводе в ч\б у всех полос разный оттенок серого. Это значит, что в игре белая полоса будет более глянцевой и отражающей, чем красная и синяя, но на самом деле это не так (если, конечно, они сделаны из одного материала или покрашены одной краской). В любом случае, пока что нам этого достаточно. Сохраняем текстуру с теми же настройками, что и у предыдущей:   Переходим к Normal-текстуре. Открываем model_nrml.dds. Видим примерно такую картину: Сразу скажу, что эта текстура нам уже не годится. Даже если сейчас просто сохранить её с правильными настройками - в игре получится что-то очень плохое. А всё потому, что при сохранении текстура осветляется. Поэтому я рекомендую всегда где-то рядом держать оригинал своей normal-текстуры, чтобы её можно было править и сохранять в .dds при необходимости.   Итак. Получить Normal-текстуру (а это текстура рельефа) можно несколькими способами. 1. Запечь в 3DsMAX.
Этот вариант можно использовать в том случае, если у вас есть высокополигональная модель, аналогичная той низкополигональной, которую вы конвертируете в игру. 2. Нарисовать в Quixel Suite.
Этот вариант можно использовать, если вы умеете работать в Quixel Suite.  Наверное, в Substance Painter есть аналогичный инструмент для создания normal-текстур. 3. Сгенерировать при помощи Quixel Suite из основной текстуры.
Этот вариант можно использовать в том случае, если у вас установлена QS, а плагин от nVidia работать нормально не хочет. Этим вариантом пользуюсь я, но рекомендую всё-таки в первую очередь попробовать следующий пункт. 4. Сгенерировать при помощи .dds-плагина nVidia  из основной текстуры. Вне зависимости от того, какой из двух последних вариантов вы выберите, в первую очередь нам нужно подготовить основную текстуру. Основные постулаты здесь таковы: 1. Текстуру желатльно обесцветить;
2. Все светлые элементы на рельефе будут выше, все тёмные - ниже;
3. Исходя из вышенаписанного, крайне желательно убрать с текстуры все лишние перепады цветов (надписи, наклейки и т.д.), иначе всё это станет рельефом.
4. Выступающие части кузова, такие как, например, гофры, стоит дополнительно выделить белым цветом (помните, что тень на текстуре также превратится в рельеф).
5. На стёкла крайне желательно делать чёрные накладки. Итого, более-менее подготовленная к созданию Normal текстура выглядит как-то так:   6.1. Создание NormalMap при помощи NVIDIA tools Cохраняемся. Потом идём в Фильтр - NVIDIA tools и жмём NormalMapFilter. Далее два варианта: 1. Фотошоп падает. В этом случае вам нужна более старая версия фотошопа или Quixel Suite (см п.6.2). Или кто-то с более старой версией фотошопа, кто сможет нажать одну кнопку в плагине, чтобы сгенерировать вам Normal-текстуру. 2. Появляется вот такое окошко: Настройки в нём, насколько я помню, должны быть именно такими. Можно поиграться со Scale: я обычно ставил там 2,2 и было норм. Жмём ОК и крутим ниже до скриншота с готовой Normal-текстурой.   6.2. Создание NormalMap при помощи Quixel Suite Тут всё вообще просто. Запускаем Quixel Suite, жмём на кнопочку NDO, а затем на самую большую кнопку. И ждём. После того, как текстура будет готова, нужно будет немного покрутить настройки. Обычно достаточно только уменьшить Size до 1 или 0.   Итак, готовая Normal-текстура выглядит примерно так: Сохраняем её куда-нибудь себе в рабочие материалы в любом формате. Для игры же сохраняем её в .dds с вот такими настройками:    Всё, основные текстуры готовы!     Часть 7: Иконки В Transport Fever модели используют два набора иконок: \res\textures\ui\models_small\vehicle\train - иконки моделей в депо
\res\textures\ui\models_20\vehicle\train - иконки моделей на линии Сначала идём в первую папку и находим там иконку модели-донора. Ширина её может быть любой, а вот высота фиксирована: 56px для железной дороги и 48px для трамваев, автобусов и грузовиков. Формат иконок - .tga (32bit). Пожалуйста, при создании иконки старайтесь сохранять единый масштаб! Чтобы создать иконку нужно открыть модель 3DsMAX и сделать простейший рендер левого борта модели. Затем сохраняем его в .tga 32bit, чтобы сохранить и альфа-канал. После этого подгоняем размер отрендеренной иконки так, чтобы по масштабу наша модель подходила к модели-донору и копируем основной и альфа-канал иконки. Итоговый результат получается примерно таким (обратите внимание на альфа-канал).   Теперь уменьшаем высоту картинки до 20px (с пропорциональным уменьшением ширины) и сохраняем результат в \res\textures\ui\models_20\vehicle\train.   И кстати, удалите пока что папки /res/audio/ и /res/config/, если они есть.  Пока что они нам не нужны, о них я расскажу немного позже. Всё готово!   Идём проверять модель в игре.     Часть 8: Проблемы и решения Очень велика вероятность того, что если тестовая игра загрузится, при покупке транспорта она всё-таки вылетит. Здесь спасает то, что Transport Fever обычно довольно детально сообщает об ошибках в модах, которые приводят к вылету. Например:   Здесь написано о том, что в файле ra1.mdl есть ссылка на файл ra1a_interior_lod0.msh, который не найден. И конечно он не будет найден, ведь я налажал в названии: файл называется ra1_interior_lod0.msh. Идём в .mdl, правим, снова идём в игру.   Вуа-ля!   В следующих частях гайда я расскажу об анимации, звуках, пассажирах и составах.
Ну и спрашивайте свои вопросы, конечно.   Информация для тех, кто любит покопаться в файлах: 1. Анимации прописываются в .msh-файлах, вскройте какой-нибудь файл двери от дефолтной или кастомной модели, чтобы понять, что к чему.
2. Понять, как прописываются пассажиры, также можно, изучив .mdl-файлы моделей транспорта с пассажирами.
3. ID, которые могут понадобиться при рассаживании пассажиров, можно посмотреть при помощи TFID из архива (откройте в нём .mdl-файл).  
  • 45 ответов