Alex

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

46 posts in this topic

Итак, пришло время! Здесь я начну писать гайд по конвертации 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 выглядят таким образом:

1.jpg

В игре используются реальные размеры модели.

 

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.jpg

 

 

Часть 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.jpg

 

Сразу думаем, где можно схитрить с анимированными частями (дверьми). Про саму анимацию я расскажу позже, на данном этапе нам просто нужно иметь в виду, какие элементы будут анимироваться.
Так вот, конвертить их по одной и прописывать каждой анимацию - это очень муторно и долго. От этого никуда не деться, если у вашей модели ширмовые двери, расположенные под разными углами (например, как у Татры Т3), однако в данном случае всё проще.

Двери здесь выхоят из проёма наружу и затем раздвигаются в стороны. Попарно анимация идентична. И это значит, что мы можем объединить в один меш (саттачить) "передние" и "задние" створки обеих дверей с каждой стороны:

4.jpg

 

Теперь, как я писал в п.1, все меши нужно назвать так, чтобы с ними было удобно работать далее. Мы будем конвертировать 4 меша дверей, 1 меш кузова, 1 меш салона, 1 меш телеги и 1 меш колёсной пары. У меня список получается вот такой:

5.jpg

 

Дальше на очереди - пивот (Pivot point). Именно координаты пивотов после будут указывается в .mdl-файле модели (а также в .grp), когда мы будем собирать её. Но сейчас нам нужно перевести модель в игровой формат.

Если что, кнопки для управления пивотом находятся вот здесь:

6.jpg

 

У кузова и салона пивот должен быть в 0 координате.
Для тележки жмём "Center to object", затем убираем "Affect Pivot Only"  и передвигаем телегу в центр сцены (но не трогаем её высоту).
Для колеса включаем управление пивотом, затем тоже "Center to object" и отключаем "Affect Pivot Only". После этого переносим колёсную пару в 0 координату. В итоге у нас получается как-то так:

7.jpg

 

Для дверей всё зависит от типа их анимации. Если двери просто перемещаются вдоль кузова, их пивот можно не трогать (или установить его в 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 :D  Соответственно, вам необходимо заменить пути в первых строчках на свои.

В строке tfmc_folder нужно указать папку, где у вас лежит TFMC, который вы можете найти в архиве в начале гайда.

Готовые .msh-файлы можно положить в абсолютно любую папку, чтобы скопировать в папку модели позже.

В строке path_to_material указывается путь к .mtl-файлу в таком виде, каким он будет в .msh-файлах. Так как у нас салон использует другую текстуру и, соответственно, другой .mtl-файл, это нужно будет потом вручную исправить (об этом я напомню ниже). Пока же правим пути в скрипте, затем идём в 3Ds MAX, выделяем все конвертируемые детали модели и жмём там F11. В появившееся окно копируем скрипт, выделяем его (Ctrl+A) и жмём Enter на доп. клавиатуре.

8.jpg

 

После этого, если все пути написаны верно, начнётся конвертация. В процессе появится окно командной строки (это TFMC), где после [Done] нужно будет нажимать Enter на доп.клавиатуре (столько раз, сколько деталей конвертируется).

9.jpg

 

Если вдруг появятся какие-то проблемы - внимательно читайте, что написано в командной строке. Скорее всего, проблема из-за неверного написания пути.

Когда всё будет готово, можно зайти в папку, указанную в скрипте, и увидеть набор файлов .msh и .msh.blob

10.jpg

Файлы .msh открываются при помощи текстового редактора (лучше всего использовать Notepad++). Здесь нужно открыть пару файлов и убедиться в том, что путь к материалу на месте. Если это не так (иногда почему-то скрипт его не прописывает) - его нужно указать вручную. Кроме того, здесь нужно изменить путь к материалу у тех файлов, которые используют отличную от других деталей текстуру (в нашем случае это салон):

11.jpg12.jpg

 

Аналогично нужно будет поступить с лодами и этот этап завершён.

 

Часть 5: Копировать\переименовать\исправить

Пришло время собирать  всё это в игровую модификацию. Здесь можно создавать папки с нуля и писать все скрипты, но я, естественно, таким не занимаюсь. Я просто беру уже существующую модель того же типа (train для локомотива, waggon для вагона, bus для автобуса и т.д.), копирую её в Transport Fever\mods и переименовываю.

В данном случае "донором" у нас станет ЧМЭ3. Вы можете взять любую подходящую модель даже из Train Fever

Итак: копировать\вставить\переименовать:

13.jpg

 

5.1. Тележки

Если тележек в вашей модели нет (например, у вас двухосный вагон) - этот пункт можно пропустить.

Заходим в папку, проходим в \res\models\group\vehicle\train (на папки audio и config, если они есть, пока не обращаем внимания). Здесь мы сразу 3 файла с тележками от чмухи. Лоды я пока что уберу, т.к. их вы можете и сами сконвертировать по аналогии. Пока что займёмся основной моделью.

На эти .grp-файлы позже будет ссылаться .mdl-файл модели. В них содержится ссылка на меши тележки и колёс, но об этом ниже.

14.jpg

Итак, переименовываем файл из chme3_lod_0_bogie.grp в ra1_lod_0_bogie.grp (чтобы упростить себе жизнь в дальнейшем я настоятельно рекомендую при переименовании файлов менять только название транспортного средства). Открываем файл в Notepad++.

15.jpg

Здесь мы видим, как я написал выше, ссылки на меши тележки и колёс, а также их координаты. Для начала переименуем всё (обратите внимание на названия мешей, они должны быть такими же, как у ваших .msh файлов, которые были получены после конвертации). Если в вашей тележке меньше осей, удалите один из блоков, но осторожно! Не растеряйте запятые. В итоге у меня получилось так:

16.jpg

 

Дальше - координаты, я выделил их выше. Эти три числа - координаты колёсной пары в Максе при учёте, что сама тележка находится в 0. Здесь первая - продольная координата (Y), вторая - поперечная (X), и третяя - вертикальная (Z). Идём в Макс, выставляем колёса на места и смотрим:

17.jpg

Аналогично со вторым колесом (не забудьте пивоту колёсных пар сделать Center to Object), и вписываем эти координаты в наш .grp-файл.

18.jpg

 

Тут готово.

 

5.2. Материалы

Переходим в \res\models\material\vehicle\train. Здесь у меня лежат два .mtl-файла: один отвечает за текстуры основной модели, второй - за текстуры салона. Это уже материалы именно от Transport Fever, поэтому если вы в качестве "донора" выбрали модель из Train Fever, тут вам стоит сходить в папку Transport Fever и стащить оттуда пару .mtl-файлов. Переименуйте их соответственно тому, что указывали при конвертации .msh-файлов и внутри них.

Открываем первый при помощи всё того же Notepad++:

19.jpg

Видим здесь много настроек, с которыми я, увы, не разбирался. Меня тут больше всего интересуют ссылки на текстуры модели. Как и в случае с тележками, просто заменяем все "chme3" на "ra1".

Если вы пропустили пункт про тележки, я повторю здесь:

Чтобы упростить себе жизнь в дальнейшем я настоятельно рекомендую при переименовании файлов менять только название транспортного средства.

Здесь у нас будет 4 ссылки на текстуры. Повторяем то же с файлом для салона - там будет только одна ссылка.

Идём дальше.

 

5.3. Меши

Наш следующий пункт назначения - папка \res\models\mesh\vehicle\train\chme3, которую необходимо переименовать в то, что нужно нам (помните, что все переименования должны быть аналогичны: в данном примере я переименовываю все chme3 в ra1 - поступайте аналогично) и полностью очистить от содержимого. Сюда копируем наши .msh-файлы, которые мы получили на 4 этапе конвертации.

20.jpg

 

Здесь всё довольно быстро. На самом деле, на этом этапе в меши нужно вписать анимацию, но блок об этом я добавлю сюда позже.

 

5.4. Собираем модель

Наконец, переходим в папку \res\models\model\vehicle\train. Удаляем всё лишнее (если есть), оставляем только один .msh-файл и переименовываем его.

В моём случае остался файл chme3a.mdl, но я его переименую просто в ra1.mdl. На этот файл ничего не ссылается, однако точно так же должны будут называться иконки.

Открываем .mdl-файл.

21.jpg

Это основной файл модели, где содержится вся информация о ней, а также ссылка на меши и группы. Почитать о структуре этого файла вы можете в п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 сцены).

22.jpg23.jpg

 

Если в вашей модели нет тележек, то здесь просто указываются ссылки на .msh-файлы колёсных пар и их координаты (а вот чтобы увидеть инфу про координаты колёс вам придётся вернуться на пункт 5.1. про тележки :D)

 

Здесь же указывается положение машиниста (его вы можете увидеть на скриншоте под блоками с тележками). Однако тут есть 2 варианта: либо писать координаты на глаз, так как у этого меша машиниста они смещены, либо просто удалить его отсюда и прописать машиниста в разделе для пассажиров, о котором я расскажу позже. В первом случае машинистом будет дедок, во втором - странного вида молодой (или не очень) человек, поэтому тут уж кому как больше нравится. В любом случае, пока что на это можно просто забить. :D

Здесь же, кстати, нужно добавить блок с мешем салона. Для удобства просто копируем блок с вызовом меша кузова и меняем там название меша:

27.jpg

Далее у нас идёт блок events

24.jpg

 

Здесь всё как-то так: 

events = {
			drive = {
					[2] = { -- порядковый номер анимируемого меша (можно посчитать вверху)
						forward = false, -- направление анимации
						name = "ventanim",	-- имя анимации					
					},
					[3] = {
						forward = false,
						name = "ventanim",						
					}
				},
				
			},

 

Однако так как про анимации мы будем разговаривать позже, пока что всё содержимое блока events можно просто удалить (не удалите лишнюю скобку или запятую!).

 

Далее указывается расстояние, на котором подгружается лод. Это основной лод, поэтому он должен показываться с 0 метров до 100-200. Однако так как пока что это единственный наш лод, я укажу здесь 2000.

25.jpg

 

Блоки с остальными лодами пока что удалим.

 

И ещё раз:
БУДЬТЕ ВНИМАТЕЛЬНЫ при удалении или добавлении новых блоков. Если вы используете Notepad++, включите подсветку синтаксиса Lua (в верхнем меню выберите Синтаксисы - Lua) и внимательно следите за подсветкой скобок.

 

Далее - название, описание и характеристики. Обратите внимание, что в качестве цены и стоимости обслуживания необходимо указывать "-1", чтобы игра могла сама сбалансировать их. Внимательно следите за синтаксисом и правильностью растановки скобок и запятых!

Чтобы закомментировать какую-нибудь строку (например, год выпуска, чтобы для теста транспорт выпускался бесконечно), нужно поставить перед ней два минуса:

26.jpg

 

В общем и целом, тут у нас всё. 

Теперь можно запустить 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. У меня в итоге получилось так:

29.jpg

 

Открываем файлы! Первый у нас - model_albedo_opacity.dds.

А, кстати: чтобы окрыть .dds-файл вам потребуется dds-плагин для Фотошоп от nVidia.

При открытии файла появится диалоговое окно. Настройки в нём должны быть такие:

30.jpg

 

Файл model_albedo_opacity.dds, (а также аналогичная текстура салона - model_interior_albedo_opacity.dds)как следует из названия, содержит текстуры альбедо и прозрачности. Соответственно, если вы используете PBR-текстуры, сюда в основной канал нужно кинуть альбедо-текстуру, а в альфа-канал - прозрачность. Там белое непрозрачно, чёрное - прозрачно. Соответственно для эффекта стекла окна здесь должны быть нарисованы серым цветом.

31.jpg32.jpg

 

Сохраняем этот файл с вот такими настройками:

33.jpg

 

Следующий на очереди - файл model_cblend_dirt_dust.dds.

В нём содержится:

  • Красный канал - ч\б текстура перекраски: чёрное перекрашивается в игре, белое - нет;
  • Зелёный канал - ч\б текстура грязи: белое - грязно, чёрное - нет;
  • Синий канал - ч\б текстура ржавчины: белое - ржавчина, чёрное - нет.

 

Так как в данный момент у нас нет текстур грязи и ржавчины (о том, как их делать при помощи программы Quixel Suite, я постараюсь рассказать в ближайшее врем), зелёный и синий канал просто закрашиваем чёрным.

Текстуру перекраски мне подготовил Old, поэтому её я и положу в красный канал. Итого получается такая картина:

34.jpg

 

Обратите внимание на список каналов справа.

Сохраняем эту текстуру с такими настройками:

35.jpg

 

 

Переходим к текстуре model_metall_gloss_ao.dds.

Красный канал: если вы используете PBR-текстуры - положите сюда текстуру Metalness. Если нет - просто закрасьте чёрным.
Зелёный канал: если вы используете PBR текстуры - положите сюда текстуру Gloss. Если нет - придётся помучаться, о этом ниже. :D
Синий канал: сюда положите отрендеренную карту Ambient Occlusion. Если её нет - закрасьте канал белым.

 

Перейдём подробно к зелёному каналу и, соответственно, gloss-текстуре. Это текстура глянцевости, то есть белый цвет здесь будет означать абсолютно глянцевый и отражающий материал, чёрный - абсолютно матовый и неотражающий. Раз у вас нет отдельной Gloss-PBR-текстуры - мы просто положим в этот канал нашу альбедо (основную) текстуру. Только перед этим обязательно осветлите в неё окна, чтобы в игре стёкла получили отражения. Моно поиграться с яркостью и контрастностью. В итоге получается что-то вроде того:

36.jpg

 

Эту текстуру вполне можно использовать в игре, но обратите внимание, что это неправильный вариант. Нужно либо всё-таки учиться делать PBR-текстуры, либо подольше посидеть с переделкой альбедо в глосс. Например, по борту у нас идёт флаг России и при переводе в ч\б у всех полос разный оттенок серого. Это значит, что в игре белая полоса будет более глянцевой и отражающей, чем красная и синяя, но на самом деле это не так (если, конечно, они сделаны из одного материала или покрашены одной краской).

В любом случае, пока что нам этого достаточно. Сохраняем текстуру с теми же настройками, что и у предыдущей:

35.jpg

 

Переходим к Normal-текстуре. Открываем model_nrml.dds.

Видим примерно такую картину:

37.jpg

Сразу скажу, что эта текстура нам уже не годится. Даже если сейчас просто сохранить её с правильными настройками - в игре получится что-то очень плохое. А всё потому, что при сохранении текстура осветляется. Поэтому я рекомендую всегда где-то рядом держать оригинал своей normal-текстуры, чтобы её можно было править и сохранять в .dds при необходимости.

 

Итак. Получить Normal-текстуру (а это текстура рельефа) можно несколькими способами.

1. Запечь в 3DsMAX.
Этот вариант можно использовать в том случае, если у вас есть высокополигональная модель, аналогичная той низкополигональной, которую вы конвертируете в игру.

2. Нарисовать в Quixel Suite.
Этот вариант можно использовать, если вы умеете работать в Quixel Suite. :D Наверное, в Substance Painter есть аналогичный инструмент для создания normal-текстур.

3. Сгенерировать при помощи Quixel Suite из основной текстуры.
Этот вариант можно использовать в том случае, если у вас установлена QS, а плагин от nVidia работать нормально не хочет. Этим вариантом пользуюсь я, но рекомендую всё-таки в первую очередь попробовать следующий пункт.

4. Сгенерировать при помощи .dds-плагина nVidia  из основной текстуры.

Вне зависимости от того, какой из двух последних вариантов вы выберите, в первую очередь нам нужно подготовить основную текстуру.

Основные постулаты здесь таковы:

1. Текстуру желатльно обесцветить;
2. Все светлые элементы на рельефе будут выше, все тёмные - ниже;
3. Исходя из вышенаписанного, крайне желательно убрать с текстуры все лишние перепады цветов (надписи, наклейки и т.д.), иначе всё это станет рельефом.
4. Выступающие части кузова, такие как, например, гофры, стоит дополнительно выделить белым цветом (помните, что тень на текстуре также превратится в рельеф).
5. На стёкла крайне желательно делать чёрные накладки.

Итого, более-менее подготовленная к созданию Normal текстура выглядит как-то так:

38.jpg

 

6.1. Создание NormalMap при помощи NVIDIA tools

Cохраняемся. Потом идём в Фильтр - NVIDIA tools и жмём NormalMapFilter. Далее два варианта:

1. Фотошоп падает. В этом случае вам нужна более старая версия фотошопа или Quixel Suite (см п.6.2). Или кто-то с более старой версией фотошопа, кто сможет нажать одну кнопку в плагине, чтобы сгенерировать вам Normal-текстуру.

2. Появляется вот такое окошко:

39.jpg

Настройки в нём, насколько я помню, должны быть именно такими. Можно поиграться со Scale: я обычно ставил там 2,2 и было норм. Жмём ОК и крутим ниже до скриншота с готовой Normal-текстурой.

 

6.2. Создание NormalMap при помощи Quixel Suite

Тут всё вообще просто. Запускаем Quixel Suite, жмём на кнопочку NDO, а затем на самую большую кнопку. И ждём.

40.jpg

После того, как текстура будет готова, нужно будет немного покрутить настройки. Обычно достаточно только уменьшить Size до 1 или 0.

 

Итак, готовая Normal-текстура выглядит примерно так:

41.jpg

Сохраняем её куда-нибудь себе в рабочие материалы в любом формате. Для игры же сохраняем её в .dds с вот такими настройками: 

42.jpg

 

Всё, основные текстуры готовы!

 

 

Часть 7: Иконки

В Transport Fever модели используют два набора иконок:

\res\textures\ui\models_small\vehicle\train - иконки моделей в депо
\res\textures\ui\models_20\vehicle\train - иконки моделей на линии

Сначала идём в первую папку и находим там иконку модели-донора. Ширина её может быть любой, а вот высота фиксирована: 56px для железной дороги и 48px для трамваев, автобусов и грузовиков. Формат иконок - .tga (32bit).

Пожалуйста, при создании иконки старайтесь сохранять единый масштаб!

Чтобы создать иконку нужно открыть модель 3DsMAX и сделать простейший рендер левого борта модели. Затем сохраняем его в .tga 32bit, чтобы сохранить и альфа-канал. После этого подгоняем размер отрендеренной иконки так, чтобы по масштабу наша модель подходила к модели-донору и копируем основной и альфа-канал иконки.

Итоговый результат получается примерно таким (обратите внимание на альфа-канал).

43.jpg

 

Теперь уменьшаем высоту картинки до 20px (с пропорциональным уменьшением ширины) и сохраняем результат в \res\textures\ui\models_20\vehicle\train.

 

И кстати, удалите пока что папки /res/audio/ и /res/config/, если они есть. :D Пока что они нам не нужны, о них я расскажу немного позже.

Всё готово!

 

Идём проверять модель в игре.

 

 

Часть 8: Проблемы и решения

Очень велика вероятность того, что если тестовая игра загрузится, при покупке транспорта она всё-таки вылетит. Здесь спасает то, что Transport Fever обычно довольно детально сообщает об ошибках в модах, которые приводят к вылету. Например:

44.jpg

 

Здесь написано о том, что в файле ra1.mdl есть ссылка на файл ra1a_interior_lod0.msh, который не найден. И конечно он не будет найден, ведь я налажал в названии: файл называется ra1_interior_lod0.msh. Идём в .mdl, правим, снова идём в игру.

 

Вуа-ля!

45.jpg

 

В следующих частях гайда я расскажу об анимации, звуках, пассажирах и составах.
Ну и спрашивайте свои вопросы, конечно.

 

Информация для тех, кто любит покопаться в файлах:

1. Анимации прописываются в .msh-файлах, вскройте какой-нибудь файл двери от дефолтной или кастомной модели, чтобы понять, что к чему.
2. Понять, как прописываются пассажиры, также можно, изучив .mdl-файлы моделей транспорта с пассажирами.
3. ID, которые могут понадобиться при рассаживании пассажиров, можно посмотреть при помощи TFID из архива (откройте в нём .mdl-файл).

 

10

Share this post


Link to post
Share on other sites

А как сделать двухсекционный ПС, чтобы в игре он был сразу двойным? 

0

Share this post


Link to post
Share on other sites

Мда..."нельзя" быть таким умным :wacko:. Как до всего этого можно было допереть? @Alex

0

Share this post


Link to post
Share on other sites

@Antikiller о, это в конфигах прописывается. Добавлю про это тоже скоро.

@Renzo постепенно... :D

0

Share this post


Link to post
Share on other sites

Реально ли анимировать паровую машину как надо? Дело в том что, пальцы кривошипов левых колес повернуты на 90 градусов вперед относительно правых.

В игре насколько помню везде машина зеркальна, с обеих сторон.

0

Share this post


Link to post
Share on other sites

@Malaxit  в принципе реально, но анимция паровоза сама по себе жутко геморна, а делать ещё и обе стороны отдельно... ну, если очень хочется - то можно. :D На счёт анимации паровоза я мб тоже напишу гайд, если вспомню, как это делается...

0

Share this post


Link to post
Share on other sites
В 21.11.2016 в 13:40, Alex сказал:

@Malaxit  в принципе реально, но анимция паровоза сама по себе жутко геморна, а делать ещё и обе стороны отдельно... ну, если очень хочется - то можно. :D На счёт анимации паровоза я мб тоже напишу гайд, если вспомню, как это делается...

Я правильно понимаю, что в файле модели нужно будет прописывать каждую сторону отдельно? Спасибо.

 

0

Share this post


Link to post
Share on other sites

Нуу... не совсем. Анимация прописывается движимым частям, она пишется в мешах. Т.е. прописывается для каждого шатуна, дышла и прочего-прочего. Поэтому объединить их попарно и сделать такую анимацию в два раза быстрее, чем делать реалистичную.

0

Share this post


Link to post
Share on other sites

Сложнааа.

В чем принципиальная разница нового скрипта конвертирования? Старым по моему проще было. Кинул obj на exe-шник и вуаля. А щас что-то в скрипте переписывать. В макс его цеплять, потом опять материалы переписывать...

Другой вопрос. Сконвертил модель в игру. Она покупается. При назначении её на линию игра крашится без сообщений об ошибке. Что это может быть?

0

Share this post


Link to post
Share on other sites
41 минуту назад, Malaxit сказал:

В чем принципиальная разница нового скрипта конвертирования? Старым по моему проще было. Кинул obj на exe-шник и вуаля. А щас что-то в скрипте переписывать. В макс его цеплять, потом опять материалы переписывать...

Вручную это без скрипта же. Скрипт делает то же самое, только не вручную. Если деталей много то это значительно ускоряет процесс: модель одним махом сохраняется в обж, конвертируется и кладётся куда нужно.

42 минуты назад, Malaxit сказал:

Другой вопрос. Сконвертил модель в игру. Она покупается. При назначении её на линию игра крашится без сообщений об ошибке. Что это может быть?

Скорее всего, проблема в текстурах. Либо они неправильно сохранены в .dds, либо что-то косячное с .mtl-файлами.

0

Share this post


Link to post
Share on other sites
33 минуты назад, Alex сказал:

Вручную это без скрипта же. Скрипт делает то же самое, только не вручную. Если деталей много то это значительно ускоряет процесс: модель одним махом сохраняется в обж, конвертируется и кладётся куда нужно.

Скорее всего, проблема в текстурах. Либо они неправильно сохранены в .dds, либо что-то косячное с .mtl-файлами.

То-есть можно старым конвертером пользоваться?

 

0

Share this post


Link to post
Share on other sites

@AlexЕще вопрос. Что нужно сделать что бы вращались и поворачивали колеса у автомобиля? У меня они статичны. Как ось и колеса прописаны...

0

Share this post


Link to post
Share on other sites

@Malaxit посмотри .mdl дефолтных грузовиков, там внизу где у скрипта поезда подключение осей у грузовиков есть оси (axles) и колёса (wheels). Вот в wheels должен указываться меш переднего колеса, а в axles - задних колёс. Или наоборот :mellow: В общем, там это всё. :D

0

Share this post


Link to post
Share on other sites

За такие гайды памятник ставить надо)

0

Share this post


Link to post
Share on other sites

@MrIgr я памятник себе воздвиг нерукотворный! :D Ты эт, если есть возможность присоединяйся, в целом конверт аналогичен таковому в Train Fever, как видишь.) По сути разница только в текстурах

1

Share this post


Link to post
Share on other sites

@Alex у меня игры нет))

0

Share this post


Link to post
Share on other sites
1 минуту назад, MrIgr сказал:

@Alex у меня игры нет))

Планируешь ли свои модели адаптировать под ТФ2?

0

Share this post


Link to post
Share on other sites

@old пугает больший объем работы по сравнению с ТФ,  не знаю пока

0

Share this post


Link to post
Share on other sites
7 минут назад, MrIgr сказал:

@old пугает больший объем работы по сравнению с ТФ,  не знаю пока

Та да, объем относительно не  малый, но потихоньку пока обновляем свое) Но ты думай в общем)

1

Share this post


Link to post
Share on other sites
В 29.11.2016 в 23:37, Alex сказал:

@Malaxit посмотри .mdl дефолтных грузовиков, там внизу где у скрипта поезда подключение осей у грузовиков есть оси (axles) и колёса (wheels). Вот в wheels должен указываться меш переднего колеса, а в axles - задних колёс. Или наоборот :mellow: В общем, там это всё. :D

Whels крутит колеса, axles указывает ось или две оси через запятую. Колесо переднее рисуется одно и потом оно же зеркалируется, если сделать два разных передних колеса, то крутится они будут в разные стороны, но поворачивать станут правильно. В итоге нам нужно всего три колеса, два задних, одно переднее. Заднее колесо по идее тоже можно зеркалировать, с этим я не игрался.

1

Share this post


Link to post
Share on other sites

Кстати вопрос про седельные тягачи и сочлененные  автобусы... у них при  повороте передние колеса вроде как не поворачиваются. игра вообще не позволяет реализацию нормальную или просто разрабы не отвлекались на такие "мелочи", но способ есть?

0

Share this post


Link to post
Share on other sites
18 минут назад, diver13 сказал:

Кстати вопрос про седельные тягачи и сочлененные  автобусы... у них при  повороте передние колеса вроде как не поворачиваются. игра вообще не позволяет реализацию нормальную или просто разрабы не отвлекались на такие "мелочи", но способ есть?

Скорее всего не доглядели. Я уже кучу косяков от разрабов нашел. На первый взгляд их не видно, но их просто дофига. К примеру на первом уровне развития завода стройматериалов их минимум два. Американская конная повозка. Паровой грузовик. Мак АС и т.д.

0

Share this post


Link to post
Share on other sites

@diver13 @Vitaro это ещё из ТФ1 тянется. Там я пробовал сделать чтобы колёса поворачивались, но ничего хорошего из этого не вышло. Может быть, конечно, плохо пробовал :mellow:

0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.