Разбор формата *.object |
Здравствуйте, гость ( Авторизация | Регистрация )
Сайт S.T.A.L.K.E.R. Inside / [ЗП] Параметры командной строки / Распаковщик ресурсов
Разбор формата *.object |
02.06.2014, 23:11
Сообщение
#1
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
Пишу импортёр *.object для блендер 3д. У меня не получается нормальные текстурные координаты получить. ЮВи вершины расположены нормально, но соединены не в том порядке в котором должны быть. Подскажите, что за данные находятся в блоках 0x7777-0x910-0x1008 и 0x7777-0x910-0x1012. Координаты вершин находятся в 0x1012, но их сразу импортировать нельзя. Нужны какие то действия, чтобы отсортировать в нужном порядке эти координаты. Но что именно, я не знаю. Помогите разобраться.
-------------------- |
 
|
|
|
|
02.06.2014, 23:56
Сообщение
#2
|
|
Кандидат Игровых Наук Репутация: 2153 Группа: Участник Сообщений: 3488 Награды: 4 Регистрация: 27.07.2009 |
http://stalkerin.gameru.net/wiki/index.php...0%BE%D0%B2_SDK)
http://stalkerin.gameru.net/wiki/index.php....BE.D1.82_excid PS: Никто тут плагины экспорта\импорта под SketchUP 2014 (Язык Ruby) случаем писать не умеет? Я б деловое предложение предложил бы. Сообщение отредактировал Shoкer - 03.06.2014, 00:00 -------------------- Мне просто нравятся синие буквы под сообщением.
|
 
|
|
03.06.2014, 17:03
Сообщение
#3
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
А здесь на сайте есть, кто в блендере моделит?
-------------------- |
 
|
|
03.06.2014, 17:25
Сообщение
#4
|
|
Продвинутый геймер Репутация: 15 Группа: Участник Сообщений: 322 Награды: 3 Регистрация: 01.05.2014 |
|
 
|
|
03.06.2014, 20:51
Сообщение
#5
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
Я скачал исходники конвертера бардака. В файле todo.txt нашёл: "? импорт/экспорт .object/.skl [blender]"
Т.е. Бардак планировал писать плагины для блендера? Никто не знает? -------------------- |
 
|
|
03.06.2014, 21:02
Сообщение
#6
|
|
Продвинутый геймер Репутация: 15 Группа: Участник Сообщений: 322 Награды: 3 Регистрация: 01.05.2014 |
|
 
|
|
03.06.2014, 21:05
Сообщение
#7
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
|
 
|
|
03.06.2014, 21:22
Сообщение
#8
|
|
Продвинутый геймер Репутация: 15 Группа: Участник Сообщений: 322 Награды: 3 Регистрация: 01.05.2014 |
Извиняюсь, вопрос несколько относится к оффтопу, вопрос может показаться тупым, но всё же косается разбора форматов: вот как Вы, все те кто написал различные утилиты, конвертеры и другие программы для работы с форматами игр ST и Metro, вскрываете эти самые форматы? Допустим есть тот же формат (*.object) или (*.ogf), пример может выбрал не из легких, или формат игровых архивов (*.db), (*.vfs*) для Metro, с чего начинается анализ неизвестного формата, как его вскрыть? Как вы определяете чанки, если это "чанковый" формат (в HEX?), как определяете что в них содержится, их размер и как с ними работать? Скиньте линки на статьи, форумы и(или) любую другую информацию как это делается, буду признателен за поддержку. Заранее спасибо.
Сообщение отредактировал MegaNub - 03.06.2014, 21:25 |
 
|
|
03.06.2014, 23:09
Сообщение
#9
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
Планировал. Будешь ждать пока Бардак напишет? Я хотел поинтересоваться. Просто было бы легче некоторые моменты понять. От одного человека слышал, что у бардака были зачатки плагина, но он его не дописал вроде бы. Не сходилось у него что-то. Кстати, получилось у меня нормальные юви координаты получить. MegaNub, -------------------- |
 
|
|
19.06.2014, 22:27
Сообщение
#10
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
Выкладываю скрипт для импорта object в Blender 2.67b:
Поддерживаются только статические. readme в архиве. -------------------- |
 
|
|
05.07.2014, 11:57
Сообщение
#11
|
|
The One Репутация: 744 Группа: Участник Сообщений: 2715 Награды: 5 Регистрация: 05.12.2005 |
с чего начинается анализ неизвестного формата, как его вскрыть? С анализа программы которая знает формат. Билды сталкера отлично работают под дебаггером + в билдах есть отладочная инфа, помогающая при декомпиляции -------------------- |
 
|
|
15.02.2018, 22:52
Сообщение
#12
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
С анализа программы которая знает формат. А что значит анализ? Это дизассемблирование движка билда и просмотр кода? И вообще, как бардак узнавал про форматы? Сообщение отредактировал Pavel_Blend - 15.02.2018, 22:53 -------------------- |
 
|
|
15.02.2018, 23:02
Сообщение
#13
|
|
Почти Игроман Репутация: 187 Группа: Участник Сообщений: 647 Награды: 4 Регистрация: 05.05.2007 |
А что значит анализ? Это дизассемблирование движка билда и просмотр кода? Именно. И вообще, как бардак узнавал про форматы? Есть подозрение, что у него был доступ к исходникам движка, уж больно сильно его конвертер местами похож. |
 
|
|
15.02.2018, 23:06
Сообщение
#14
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
Билды сталкера отлично работают под дебаггером + в билдах есть отладочная инфа, помогающая при декомпиляции а как в билдах включить режим дебагга? И где отладочная информация находится? В консоли и логах? -------------------- |
 
|
|
15.02.2018, 23:09
Сообщение
#15
|
|
Почти Игроман Репутация: 187 Группа: Участник Сообщений: 647 Награды: 4 Регистрация: 05.05.2007 |
Pavel_Blend, запустить билд под дебагером, x86dbg например, найти интересующее место в коде и изучать как оно работает. Я надеюсь ты знаешь язык ассемблера.
|
 
|
|
15.02.2018, 23:55
Сообщение
#16
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
Я надеюсь ты знаешь язык ассемблера. Если что - я знаю. Чем смогу - помогу 3д художнику. -------------------- nop
|
 
|
|
16.02.2018, 09:01
Сообщение
#17
|
|
Опытный Игрок Репутация: 5 Группа: Участник Сообщений: 65 Награды: 2 Регистрация: 03.05.2012 |
Исходный код в сети, что вы в самом то деле...
|
 
|
|
16.02.2018, 14:55
Сообщение
#18
|
|
Почти Мастер Репутация: 1357 Группа: Участник Сообщений: 1155 Награды: 5 Регистрация: 28.05.2010 |
Есть подозрение, что у него был доступ к исходникам движка, уж больно сильно его конвертер местами похож. Не, он же писал, что код сохранения пысовских форматов стянут с пыс. А учитывая тот факт, что ковырять сталкир он начал ещё в 2006 году (если не раньше), можно сделать вывод, что бинарники наверняка были от дебажных билдов.Уж если бы были исходники, то он бы реализовал экспорт анимации камеры. Исходный код в сети Интересно, Лохотрон уже знает?
-------------------- Сверхнарод, не желающий кормить своего уицраора шаввой, будет кормить чужого гаввахом!
--------------- ------------ ---------- -------- ------ ---- -- |
 
|
|
16.02.2018, 15:21
Сообщение
#19
|
|
Почти Игроман Репутация: 187 Группа: Участник Сообщений: 647 Награды: 4 Регистрация: 05.05.2007 |
|
 
|
|
16.02.2018, 20:05
Сообщение
#20
|
|
Доктор Игровых Наук Репутация: 544 Группа: Участник Сообщений: 3657 Награды: 9 Регистрация: 12.07.2007 |
И вообще, как бардак узнавал про форматы? Как в анекдоте есть 3 путя: 1) Наличие исходников, дальше найти нужный участок кода и тупо скопипастить. 2) Дизасм кода как отметил Neo][ и курение асмы или перегон в псевдокод СИ и курение его, дальше только воссоздать алгоритм. 3) Курить формат хэксом, строить предположения и проверять их. По поводу 3го варианта, как это обычно происходит: - ясен пень что все будет выглядеть как куча байтов. - мы знаем что чаще всего быйты были получены из конкретных типов. К примеру int =4 байта. - включаем внимательность и немного работаем калькулятором, глаз цепляется за последовательности int int int, делаем предположение что это может быть координата вершины - отсюда вытекает закономерный вопрос а сколько их там будет подряд? Значит гдето перед ними или в самом начал\конце файла будет число которое это укажет - пробуем на глаз определить конец этих последовательностей(лучше конечно посчитать сколько раз подряд идут int). - к примеру на предыдущем шаге мы получили число 100, пробуем предположить что это x y z вершин, делим 100\3 =33.3, не подходит т.к. число должно быть целым, предполагаем что это x y z d значит 100/4 = 25 уже лучше, запомним это число т.к. будем искать его упоминание. Так же можно на всякий случай предположить что мы ошиблись и тип short а значит всего 2 байта т.е. 100/2 = 50 вершин x y. Возможно это и другой тип данных. К слову на этом этапе проще всего попытаться представить числа на бумаге если думаешь что это координаты. - ищем эти числа перед последовательностьй, вначале\конце файла. Предположим что нашли. - проверяем полученное на другом файле, если число координат скажем перед началом последовательностей совпало то УРА, мы нашли где лежат вершины. - дальше по схожему алгоритму ищем предположительно другие последовательности (нормали, текстурные координаты, текстурную развертку и много друго что может там оказаться) - постепенно неизвестных последовательностей и байтов стало намного меньше и получилось нечто такое "int неизвестно, int число вершин последовательность_вершин, char[] название_анимации последовательность_кадров_анимации". - зная это уже можем писать конвертер. * Из сложностей: 1) типов данных может быть много 2) не факт что они идут последовательно 3) байты бывают little и big endian 4) данные могут быть шифрованы\сжаты начиная от чего то стандартного типа zlib и заканчивая чем то своим и сложным 5) данные могут быть не полные, когда смещения начала\конца\числа последовательности хранятся гдето отдельно или захардкожены в программе 6) не всегда известно что ожидать внутри файла, к примеру зная что это точно модель то можно точно сказать что в файле точно есть как минимум координаты вершин. 7) внутри может быть целая структура из структур 8) возможно что то забыл. Что удобнее 2 или 3й вариант, ну ОТЦЫ знают асму и си и естественно отлично представляют структуры и на глаз переводя ричность\битность а значит разберут формат раз в 5 быстрее чем лохи только с 3м вариантом. При этом может быть и обратный эффект, если библиотек\ехе много и они обфусцированы и защищены то на декомпиляция от интереса уйдет намного больше времени чем чистый 3й вариант. Тоже относится и к 1му варианту, в зависимости от глубины кода по проге может оказаться что скопипастить не получится а в лучшем случае удасться узнать какието мелкие моменты которые проще забрать, или же наоборот окажется проще не разбираться с кодом а наткнуться на нечто типа dump\unpack\extract и останется всеголишь его вызвать. |
 
|
|
Текстовая версия | Сейчас: 04.05.2024, 16:51 |