Omich

Train-Fever Model Viewer

94 сообщения в этой теме

Не дожидаясь выхода официальных средств моддинга или тулз от товарищей с http://train-fever.net/ я стал сам копаться в .msh и .msh.blob файлах с hex-редактором.

 

Довольно быстро пришло осознание, что blob состоит из двух частей: массива 32-битных целых чисел (индексов) и массива вещественных чисел (собственно, компонентов вершин, нормалей и касательных, текстурных координат). А файл msh представляет из себя lua-скрипт, в котором указаны смещения в байтах, по которым надо брать данные из blob-а.

 

Была быстренько набросана программка для визуализации моделей из игры посредством OpenGL. Собственно, её и выкладываю.

 

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

ZOXHLW0.png

Программа принимает msh-файл единственным параметром командной строки. В проводнике виндовс файл модели можно просто перетянуть на исполняемый файл программы.

 

Скачать http://rghost.ru/57883781

 

Также исходный код (C#, .NET4)

 

Теперь, зная, как устроен формат моделей (по крайней мере, для поездов), я работаю над конвертером моделей в формат игры.

14

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

13

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

И как немцы - на все авторское право наложить. =))))
 

Кстати, tf.net не работает... 

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Небольшой апдейт. Полагаю, что будет удобно для проверки быстрой перекрасок поездов и т.п. без запуска игры.

Теперь оно вторым опциональным параметром принимает имя файла текстуры. Например, если из папки игры запустить её с параметрами: res\models\mesh\vehicle\train\db_v100\lod_1_v100.msh res\textures\models\vehicle\train\train_db_v100.tga

2XnAhX8.png

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

Скачать новую версию: http://rghost.ru/57887726 И сразу фикс одной ошибки http://rghost.ru/57887984

Исходники: http://pastebin.com/7GZY1vn3

4

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А выбирать между слоями детализации можно?
Ну ТЕ разные LOD'ы

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А выбирать между слоями детализации можно?

Ну ТЕ разные LOD'ы

Разные лоды лежат в моделях игры как отдельные пары msh и msh.blob файлов, так что просто открываешь нужный.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Оу, спасибо, будем-с знать

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Конвертер моделей в формат игры почти завершён, выложу его после некоторой обкатки и исправления возможных багов. Также, выложу немногим позже подробное описание форматов игровых файлов, разобранных мной.

В качестве эксперимента, я заменил корпус полувагона на единичный куб, модель которого сконвертировал своей программой:

MjuibbPl.jpg

x6QsY0Kl.jpg

WUdX31Ll.jpg

Всё работает нормально.

2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Супер, ждём-с с нетерпением. :)

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Доделал конвертер моделей из .blend/.3ds/.obj и ряда других форматов в формат игры (пары .msh и .msh.blob). Выложил его и программу для просмотра моделей, с которой и началось копание в формате моделей игры, на своём сайтике:

Конвертер моделей

Программа для просмотра моделей

 

Конвертер моделей просто преобразует геометрию модели в используемый игрой формат. Дополнять необходимыми параметрами файл .msh и составлять .mdl для добавления своего поезда или т.п. в игру сейчас всё же придётся руками.

Я позже постараюсь составить туториал, как всё же с нуля добавить свою модель транспорта в игру.

4

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Супер, спасибо!

 

Небольшой туториал и правда не помешает. :D У меня на этапе покупки т\с в депо игра падает с такой ошибкой:

 

post-1-0-31762000-1410167650.jpg

 

Файл с модом вот. Просто закинул одну из своих моделек, без анимаций и прочего, для теста. Файл .mtl назван так же, как материал на модели в Максе. Это здесь важно вообще? В CiM просто было важно.

 

Если что, иконка в депо там от немецкого дизеля. :D

 

LAZ_A183.zip

 

 

Кстати, что интересно, после нескольких перезапусков TF почему-то начала адски лагать. Фризит даже курсор в главном меню.

 

 

upd: эксперимент показал, что ошибка возникает из-за моего файла .msh /.msh.blob. Я просто заменил его на свой у того же немецкого дизеля, и игра упала так же. Я конвертил из .obj, если это важно.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Та ну, на кой хрен в игре ЛАЗ А183?
Лучше бы Икарус-гармошку запилил

-3

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@SH42913, ну вот тебя забыл спросить, на чём мне экспериментировать. %) Кроме того, я не делал Икарусов. А ЛАЗа в игре ещё долго не будет, потому что у него не нарезаны двери и нет хоть какого-то внутреннего пространства.

3

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да я ж в шутку же :D

-3

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да я ж в шутку же :D

Шютник! Будэшь дэлать шашлык из этой невеста - не забудь пригласить!)) 

3

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попинал ЛАЗ, что-то с ним реально не так, хотя msh выглядит корректно, и мой model viewer сумел его нормально открыть и показать. Можешь скинуть модельку, которую конвертировал?

И да, забыл сказать, msh в параметре materials должен содержать путь к корректному mtl, иначе игра будет падать и т.п., однако простое его добавление проблему не решило

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Omich, попробую сейчас ещё какую-нибудь модельку конвертнуть по-новой. Через 3Ds, например, не .obj.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так-с, другая модель конвртнулась нормально. То есть, ну... во всяком случае, она выехала из депо. Не обращайте внимания на детали от Вольво, у меня два вопроса. :D

 

Первый и главный - почему поехали текстуры и можно ли с этим что-то сделать.

Второй и  не менее главный - а почему он, собственно, из земли торчит? :D В Максе моделька стоит нормально.

 

post-1-0-60767200-1410184264_thumb.jpg

2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Даже не знаю, попробуй отразить развёртку по высоте или т.п.

А по поводу ориентации - я сомневаюсь, что ориентация в максе совпадает с ориентацией в игре, например вертикальной может быть где-то ось z, а где-то ось y. Попробуй просто соответствующим образом повернуть её в максе, лол.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тададам. :D Снова же, не обращайте внимания на детали от Вольво. Развёртку нужно отражать по вертикали. В Максе низ у модели = проекция Back, перед - проекция Right.

 

Вечером буду ампутировать лишние двери и попробую нормально пришить колёса.

post-1-0-80242200-1410187049_thumb.jpg

post-1-0-58655600-1410187054_thumb.jpg

6

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Зачетная моделька :3
Ждем-с продолжения

2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Круто. Omich молодец.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Лишние двери ампутированы, колёсики крутятся и поворачиваются. Теперь вопрос по анимации нужных дверей, собственно.

 

post-1-0-65638300-1410204178_thumb.jpgpost-1-0-41106600-1410204183_thumb.jpg

 

Omich, TFMV по этому поводу будет что-нибудь уметь, или тоже можно\нужно вручную это как-то прописывать?

8

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Чей-та мне кажется, что угол поворота колес слишком маленький

-1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Alex, я потом, конечно, подумаю над автоматизацией конвертации анимаций из модели. Но пока только руками, в прочем это не очень сложно:

 

Во первых для каждого отдельного подвижного элемента нужно создать отдельную пару msh/msh.blob, моя программка и так создаёт отдельные для каждого меша модели.

 

Во вторых, в msh подвижного элемента описываются в блоке animations его анимации, например так:

animations = {

opend1 = {
 type = "KEYFRAME",
 params = {
  origin = { 0, 0, 0, },
  keyframes = {
   {
    time = 0,
    rot = { 0, 0, 0 },
    transl = { 0, 0, 0 }
   },  {
    time = 500,
    rot = { 0, 0, 0 },
    transl = { 0, -0.0465, 0 }
   }, {
    time = 1100,
    rot = { 0, 0, 0 },
    transl = { -0.5567, -0.0465, 0 }
   }
  }
 }
},

},

opend1 - имя анимации, оно тут, вроде, может быть произвольным, на него мы будем ссылаться в другом файле;

type = "KEYFRAME" - означает, что это анимация по ключевым кадрам, ещё в игре есть костная анимация для человечков, но с ней я не разбирался, да и толку от неё тут, наверное, нет;

origin = { 0, 0, 0, } задаёт позицию элемента относительно модели.

Дальше там перечисляются ключевые кадры, для каждого кадра:

time - время от начала анимации, скорее всего в тысячных долях секунды;

rot - вращение и transl - смещение модели в данном кадре.

 

В третьих мы идём в наш файл mdl и в lods.children перечисляем наши двери и т.п. через запятую:

{
 id = "vehicle/bus/volvo_5000/lod_0_door1.msh",
 transf = {

  1, 0, 0, 0,

  0, 1, 0, 0,

  0, 0, 1, 0,

  -0.3426, -1.1448, 0, 1,

 },
 type = "MESH",
},

id - очевидно, путь к msh;

transf - матрица трансформации 4х4;

type - может быть MESH, либо GROUP, если мы ссылаемся не на msh, а на grp файл. Файлы grp лежат в group и позволяют сгруппировать несколько msh в один объект;

 

В четвёртых, здесь же ищем lods.events.

Тут уже записываются вполне конкретные имена событий, нас интересуют close_all_doors и open_all_doors.

События описываются примерно так:

[2] =

{
 forward = false,
 name = "opend1",                        
},

Тут [2] - это номер модели или группы из перечисления lods.children, при том считаются они с единицы;

forward может быть равно true или false. Если false - то анимация проигрывается наоборот. Это очень удобно, когда, например, анимация открытия и закрытия дверей идентичны;

name - имя анимации, которое мы вписали в msh подвижного элемента.

 

Это вроде всё. Вся информация подчерпнута в ходе изучения файлов игры и экспериментов с ними. Исправления и дополнения приветствуются.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу