Life For Speed [.VOB]
#1
Отправлено 28 April 2013 - 11:37
Уже долгое время пытаюсь разобрать формат *.vob , этот формат в себе содержит трехмерную модель автомобиля для игры (настройки материалов, модель ...), вроде даже только половину модели так как модель в игре симметрична.
Что я нашел для это го формата, программа которая открывает этот формат: LFSCarImport.
Программу не получилось декомпилировать (.NET Reflector'ом) и посмотреть как она этот формат (*.vob) открывает.
Смысл разбора это го формата, что бы создать импорт и экспорт в 3дс макс. Импорт в 3дс макс уже есть но там надо делать через змоделлер и LFSCarImport.
Проблема в том что я не очень хорошо разбираюсь в бинарных файлах (правильно назвал ?), если у кого есть не много времени может могли бы написать декриптор, что бы он переводил формат из бинарного в текстовый а значение и настройки я сам разберу, ну и сам 3д меш.
То ко желательно писать код декрипторо на c#.net если возможно.
Добавлю еще несколько примеров файла:
http://rghost.ru/pri...bcfb22f49f93fb5
http://rghost.ru/pri...dec97f311f666ca
Спасибо.
#2
Отправлено 29 April 2013 - 13:10
http://codepad.org/qbJBbcyJ/raw.txt - похоже на описание формата (неполное)
http://lfsaddons.host56.com/ - тут есть кое-какие утилиты
#3
Отправлено 29 April 2013 - 16:48
http://codepad.org/qbJBbcyJ/raw.txt - похоже на описание формата (неполное)
Да вроде это и есть не плохой разбор того формата, не много посмотрел через хекс редактор, сов подает,(я думаю) по нему можно ориентироваться.
Сейчас самое трудное головоломка как написать хотя бы самый простой декриптор ... ищу разные примеры, так как сам полностью не писал ни разу.
Уже сам что то набросал конечно может я не так делаю но хотя бы что то. Буду пробовать разобрать, и писать в эту тему о прогрессе.
Может можете подсказать кому можно обратится по подсказкам насчёт написание кода для дескриптора данного формата желательно на c#.net но если нет возможности то и на с++ можно ?
#4
Отправлено 01 May 2013 - 12:19
К сожалению, не смогу.Может можете подсказать кому можно обратится по подсказкам насчёт написание кода для дескриптора данного формата желательно на c#.net но если нет возможности то и на с++ можно ?
Могу только посоветовать статью по разбору 3D форматов (незаконченная).
В ней есть ссылка на тему форума Xentax, где более подробно разбирают один из форматов (в качестве примера).
Можно попоробовать там к кому-нибудь обратиться.
#5
Отправлено 09 May 2013 - 16:15
Пока что разобрался с самым началом, получение всех объектов, номер материала (через хекс редактор сам проверял поменял номер материала и в игре модель меняла материал) количество объектов в файле, количество вершин и полигонов вроде получил но не совсем уверен правильно ли подобрал.
Вот что получилось:
Сейчас самое трудное разобраться с вершинами и полигонами ...
Если брать первые 10 вершины то получается что то такое:
Vertex: 1 63 63 0 0 63 93 63 63 63 0 0 17 0 0 0 63 63 0 0 63 63 2 0 76 86 0 0 18 0 0 0 Vertex: 2 0 0 0 0 63 63 63 63 16 2 1 0 18 0 0 0 0 0 0 0 63 39 63 63 106 89 0 0 17 0 0 0 Vertex: 3 87 63 0 0 63 63 1 0 63 63 0 0 18 0 0 0 0 0 0 0 91 63 63 63 60 95 0 0 18 0 0 0 Vertex: 4 0 0 0 0 63 36 63 63 106 89 0 0 18 0 0 0 0 0 0 0 63 36 63 63 100 74 0 0 17 0 0 0 Vertex: 5 63 63 0 0 63 85 63 63 63 16 0 0 17 0 0 0 63 63 0 0 63 63 2 0 17 46 0 0 17 0 0 0 Vertex: 6 121 72 0 0 87 2 63 63 63 63 0 0 17 0 0 0 63 21 0 0 63 2 0 51 114 0 0 18 0 0 0 Vertex: 7 0 0 0 0 87 2 63 63 63 63 0 0 18 0 0 0 0 0 0 0 54 63 63 63 63 22 0 0 17 0 0 0 Vertex: 8 63 21 0 0 40 63 2 0 8 112 0 0 17 0 0 0 87 63 0 0 63 63 1 0 63 16 0 0 17 0 0 0 Vertex: 9 121 72 0 0 91 63 63 63 60 95 0 0 1 0 0 0 105 45 0 0 63 63 0 0 63 63 0 0 1 0 0 0 Vertex: 10 63 44 0 0 80 63 0 0 17 63 0 0 17 0 0 0 63 63 0 0 63 123 2 0 63 93 0 0 17 0 0 0 Vertex: 11
Кстати то описание хорошо помогло ...
#6
Отправлено 21 April 2014 - 19:34
Прошло довольно много времени перед я нашол еще парочку параметров (взял большой перерыв):
Параметры Vertices, Faces (до сихпор не уверен насчёт этого параметра) читать надо как int16 по два байта, также и сколичеством обектов.
В этот раз получилось изменить позиции вертексов:
Вершины начинаются сразу после параметров обектов. 16 байтов в блоке, 4 байта X ось, 4 байта Y ось, 4 байта Z ось, и еще 4 байта неизвестного/неизвестных параметров.
Единственное не понятно как вершины надо читать. Если читать как int32 тогда у первых 10 получается что то такое:
File: LFS\data\veh\XF.vob SREOBJ Vertices count 3435 Face count 6609 Objects found: 133 --------------------Object list-------------------- Object name Uknown Possibly Material ID Possibly RGBA colour values M1_side 0 0 10 Possibly RGBA: 9 9 9 2 mattblak 0 0 0 Possibly RGBA: 90 67 18 0 l_rind 0 0 8 Possibly RGBA: 18 18 18 0 shnyblak 0 0 1 Possibly RGBA: 48 32 0 0 l_brk 0 0 8 Possibly RGBA: 63 63 63 0 K_plte1 0 0 5 Possibly RGBA: 118 118 118 0 Vent R B 0 0 61 Possibly RGBA: 63 63 63 0 C1_sprU 0 0 45 Possibly RGBA: 118 118 118 0 Vent R A 0 0 60 Possibly RGBA: 124 124 124 0 l_head 0 0 6 Possibly RGBA: 63 63 63 0 c1_sp2T 0 0 44 Possibly RGBA: 63 94 25 0 K_plte2 0 0 4 Possibly RGBA: 63 63 63 0 SUNstrp 0 0 43 Possibly RGBA: 40 40 40 0 inside1 0 0 0 Possibly RGBA: 63 63 63 1 WATER 0 0 24 Possibly RGBA: 63 63 63 1 FUEL 0 0 23 Possibly RGBA: 63 63 63 0 C1_lt_m 0 0 47 Possibly RGBA: 63 63 63 0 NAME 0 0 22 Possibly RGBA: 48 48 48 0 g_head 0 0 100 Possibly RGBA: 63 63 63 0 key R 0 0 63 Possibly RGBA: 63 63 63 0 BARS 0 0 46 Possibly RGBA: 63 63 63 0 exhaust 0 0 15 Possibly RGBA: 63 63 63 0 C1_top 0 0 12 Possibly RGBA: 63 63 63 0 C1_frnt 0 0 11 Possibly RGBA: 63 63 63 0 K_Lgrll 0 0 9 Possibly RGBA: 28 28 28 0 K_under 0 0 0 Possibly RGBA: 63 63 63 0 C1_back 0 0 13 Possibly RGBA: 63 63 63 0 C1_splr 0 0 14 Possibly RGBA: 63 63 63 1 K_miror 0 0 20 Possibly RGBA: 124 124 124 0 L_Lfog 0 0 7 Possibly RGBA: 63 63 63 1 K_clock 0 0 21 Possibly RGBA: 34 42 36 0 G_WINDF 0 0 101 Possibly RGBA: 90 67 18 0 l_find 0 0 6 Possibly RGBA: 19 19 19 0 winframe 0 0 1 Possibly RGBA: 95 95 95 0 l_rev 0 0 8 Possibly RGBA: 0 0 0 0 K_BLACK 0 0 0 Possibly RGBA: 63 63 63 0 C1_Wmr F 0 0 118 Possibly RGBA: 0 0 0 0 sunscr5 0 0 107 Possibly RGBA: 0 0 0 0 sunscr4 0 0 106 Possibly RGBA: 0 0 0 0 sunscr3 0 0 105 Possibly RGBA: 63 63 63 0 sidoorL 0 0 2 Possibly RGBA: 0 0 0 0 sunscr 2 0 0 104 Possibly RGBA: 63 63 63 0 dialMSKR 0 0 99 Possibly RGBA: 0 0 0 0 sunscree 0 0 103 Possibly RGBA: 76 79 79 0 knob 0 0 41 Possibly RGBA: 19 19 19 1 carpet 0 0 3 Possibly RGBA: 118 118 118 0 VentD2 0 0 59 Possibly RGBA: 118 118 118 0 VentD1 0 0 58 Possibly RGBA: 63 63 63 0 screw1 0 0 53 Possibly RGBA: 34 42 36 0 G_WINDS 0 0 101 Possibly RGBA: 63 63 63 0 cloth R 0 0 33 Possibly RGBA: 48 48 48 0 g_fog 0 0 100 Possibly RGBA: 63 63 63 0 C1_frnt 0 0 11 Possibly RGBA: 63 63 63 0 M2_bont 0 0 12 Possibly RGBA: 63 63 63 0 C2_roof 0 0 12 Possibly RGBA: 63 63 63 0 C2_frnt 0 0 11 Possibly RGBA: 63 63 63 0 C1_SP_T 0 0 16 Possibly RGBA: 63 63 63 0 C1_sp_U 0 0 17 Possibly RGBA: 63 63 63 0 C1_sp_L 0 0 18 Possibly RGBA: 34 42 36 0 G_WINDR 0 0 101 Possibly RGBA: 63 63 63 0 C1_fsplr 0 0 19 Possibly RGBA: 118 118 118 0 PlasticF 0 0 25 Possibly RGBA: 118 118 118 0 PlasticR 0 0 27 Possibly RGBA: 118 118 118 0 PlasticT 0 0 28 Possibly RGBA: 63 63 63 0 Coth1 T 0 0 32 Possibly RGBA: 63 63 63 0 Pillar1R 0 0 29 Possibly RGBA: 63 63 63 0 Pillar1T 0 0 31 Possibly RGBA: 63 63 63 0 carpet2 0 0 36 Possibly RGBA: 34 42 36 4 rearscrn 0 0 102 Possibly RGBA: 41 41 41 0 Plastc3R 0 0 38 Possibly RGBA: 46 46 46 0 Plastc3F 0 0 39 Possibly RGBA: 46 46 46 0 Plastc3T 0 0 42 Possibly RGBA: 29 29 29 0 Scloth1F 0 0 48 Possibly RGBA: 29 29 29 0 Scloth1T 0 0 49 Possibly RGBA: 53 53 53 0 Scloth2F 0 0 50 Possibly RGBA: 53 53 53 0 Scloth2T 0 0 51 Possibly RGBA: 95 95 95 0 Splast F 0 0 52 Possibly RGBA: 63 63 63 0 pillarR2 0 0 30 Possibly RGBA: 63 63 63 0 carpet2R 0 0 34 Possibly RGBA: 63 63 63 0 carpetR2 0 0 35 Possibly RGBA: 63 63 63 0 carpet F 0 0 37 Possibly RGBA: 118 118 118 0 plastcF2 0 0 40 Possibly RGBA: 118 118 118 0 cassette 0 0 54 Possibly RGBA: 118 118 118 0 Vent1 F 0 0 55 Possibly RGBA: 118 118 118 0 vent1 T 0 0 56 Possibly RGBA: 118 118 118 0 vent1 T2 0 0 57 Possibly RGBA: 118 118 118 0 plastcF3 0 0 26 Possibly RGBA: 113 113 113 0 ASHtray 0 0 62 Possibly RGBA: 118 118 118 0 steerC L 0 0 85 Possibly RGBA: 118 118 118 0 SteerC R 0 0 84 Possibly RGBA: 63 63 63 0 Key B 0 0 66 Possibly RGBA: 85 85 85 0 carbon1F 0 0 64 Possibly RGBA: 63 63 63 0 dialMSKL 0 0 98 Possibly RGBA: 63 63 63 0 C8Jwld32 0 0 77 Possibly RGBA: 63 63 63 0 C8Jwld31 0 0 76 Possibly RGBA: 63 63 63 0 C8Jwld23 0 0 75 Possibly RGBA: 63 63 63 0 conslGTR 0 0 83 Possibly RGBA: 63 63 63 0 C8JwldSA 0 0 67 Possibly RGBA: 63 63 63 0 C8JwldSB 0 0 68 Possibly RGBA: 63 63 63 0 C8JwldSC 0 0 69 Possibly RGBA: 63 63 63 0 Resin T 0 0 78 Possibly RGBA: 63 63 63 0 C8JwldRA 0 0 70 Possibly RGBA: 63 63 63 0 C8JwldRB 0 0 71 Possibly RGBA: 63 63 63 0 C8JwldRC 0 0 72 Possibly RGBA: 63 63 63 0 C8Jwld21 0 0 73 Possibly RGBA: 63 63 63 0 C8Jwld22 0 0 74 Possibly RGBA: 63 63 63 0 Resin R 0 0 79 Possibly RGBA: 63 63 63 0 Weld8E F 0 0 93 Possibly RGBA: 63 63 63 0 Weld8D F 0 0 92 Possibly RGBA: 63 63 63 0 Hole8 F 0 0 95 Possibly RGBA: 63 63 63 0 Weld8C F 0 0 90 Possibly RGBA: 63 63 63 0 barsSHNY 0 0 86 Possibly RGBA: 63 63 63 0 weld8B F 0 0 88 Possibly RGBA: 63 63 63 0 weld8A F 0 0 87 Possibly RGBA: 63 63 63 0 hole 8T 0 0 94 Possibly RGBA: 63 63 63 0 weld8B T 0 0 89 Possibly RGBA: 63 63 63 0 Weld8C T 0 0 91 Possibly RGBA: 85 85 85 0 carbon1R 0 0 65 Possibly RGBA: 63 63 63 0 GTRflorT 0 0 80 Possibly RGBA: 63 63 63 0 gtrFlorR 0 0 82 Possibly RGBA: 63 63 63 0 gtrFlorF 0 0 81 Possibly RGBA: 63 63 63 0 RCholeR1 0 0 96 Possibly RGBA: 63 63 63 0 RCholeR2 0 0 97 Possibly RGBA: 63 63 63 0 CHweldRA 0 0 108 Possibly RGBA: 63 63 63 0 CHweldRB 0 0 109 Possibly RGBA: 63 63 63 0 CHweldRC 0 0 110 Possibly RGBA: 63 63 63 0 CHweldRD 0 0 111 Possibly RGBA: 63 63 63 0 CHweldRE 0 0 112 Possibly RGBA: 63 63 63 0 Bolt 7 0 0 116 Possibly RGBA: 63 63 63 0 C1_Wmr T 0 0 117 Possibly RGBA: 87 87 72 0 metal2 0 0 114 Possibly RGBA: 43 43 43 0 under 0 0 113 Possibly RGBA: 63 63 63 1 Mirror 0 0 115 Possibly RGBA: 65 0 0 0 Material count: 118 --------------------End list-------------------- Vertices: -48048 39809 -14434 1 -50826 41233 -14115 1 -50145 41758 -8299 1 -8293 -5426 64066 1 -27766 24909 48017 1 -45251 97162 -40 1 -45158 96670 -2205 65 -44131 97405 -12266 1 -45298 97416 11014 1 -45356 94210 11975 1
Код с помощью которого читал вершины написан на Visual Basic NET
For i = 1 To 10 'vertices_count Dim vert1_x As Integer = reader.ReadInt32 Dim vert1_y As Integer = reader.ReadInt32 Dim vert1_z As Integer = reader.ReadInt32 Dim vert_x As Single = vert1_x Dim vert_y As Single = vert1_y Dim vert_z As Single = vert1_z Dim vert1_unk1 As Integer = reader.ReadInt32 'ukwnown flag ? RichTextBox1.Text &= vbNewLine & vert_x & vbTab & vert_y & vbTab & vert_z & vbTab & vert1_unk1 Next
Также импортнул только вершины в 3дс макс (как и было описано раньше, некоторые обекты в модели зеркальные):
Буду дальше пытатся разобрать этот формат.
#7
Отправлено 22 April 2014 - 12:05
Всё разобрался наконец ,прокчически год прошол !
Еще надо поразбиратся с материалами, думаю скоро выложу сам исходник максскипрта для импорта моделей
Сообщение отредактировал novichek: 22 April 2014 - 12:21
#8
Отправлено 24 April 2014 - 18:10
Как и писал раньше, выложу макс скрипт для импорта файлов в 3д редактор (3ds Max), но он пока что неполный ! Не хватает материалов и еще пару вещей, также не понятно, почему у некоторых фейсов неправельные индексы за пределами количества вершин.
Чтобы запустить макс скрипт, надо будет его скопировать в редактор макс скрипта и применить горячию клавишу CTRL + E, для его запуска.
Найти редактор макс скрипта можно, нажав MAXscript -> New Script, далее, в появившееся окно скопировать скрипт.
Кстати мой ник танк а не новичок , по поэтому его вписал в окно "About".