|
|
|
Канал X2: The Threat: «X2tools: Бинарные BOB --> BOD» |
|
|
CheckerTwo
550 EGP
     Рейтинг канала: 4(96) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004
 |
|
Добрый день, добрый!
После некоторых колебаний хочу поделиться информацией по внутреннему содержанию бинарных BOB файлов. Колебаний, потому как работа не доведена до нормального состояния из-за острой нехватки времени и мозгов. На текущий момент написана программка, конвертирующая бинарник в стандартный текстовый BOD. Несмотря на то, что проблемы пока есть,
пользоваться уже можно.
Теоретическая часть
В бинарнике каждая структура заключена в операторные скобки. Почти как в паскале "begin" - "end". Например имя меша заключено в скобки "NAME" далее идет строка и заканчивается "/NAM".
Итак, бинарный боди-файл имеет следующую структуру:
Код: |
BOB1
INFO -- /INF // может отсутствовать
MAT5 -- /MAT
BODY <cnt> : word
for 1..cnt begin
BONE -- /BON
POIN -- /POI
WEIG -- /WEI
PART -- /PAR
end;
/BOD
/BOB
|
INFO - это поле содержит строку - информацию о файле
MAT5 содержит информацию о материале. В основном поля таблицы соответствуют тому, что выводится в текстовый файл. Есть битовые поля. (Спасибо SPeN23 за подробный разбор полей.)
Код: |
MAT5 <cnt> : long
for 1..cnt begin
<idx> : word; <X1..X23> : word;
end;
/MAT
|
Таблица вертексов POIN имеет сложную структуру, с плавающим форматом, некоторые вещи разобрать не удалось. Но на генерацию текстового файла эти поля (кажись) влияния не оказывают. Я надеюсь...
Код: |
POIN <cnt> : long
for 1..cnt begin
<tag> : word;
|0x19 : <F1..F3> : long; <F4..F6> : long; <F7> : long;
|0x1B : <F1..F3> : long; <F4..F5> : long; <F6..F8> : long; <F9> : long;
|0x1F : <F1..F3> : long; <F4..F5> : long; <F6..F10> : long; <F11> : long;
end;
/POI
|
<F1..F3> - координаты вершины
<F4..F5> - текстурные координаты
Таблица полигонов PART состоит из нескольких секций. Их число определяется числом материалов, использованных в модели.
Код: |
PART <tmp> : long; <tmp> : long; <cnt_sec> : word;
for 1..cnt_sec begin
<mat> : long; <cnt_faces> : long;
for 1..cnt_faces begin
<T1..T3> : long; // индексы вершин
<tag> : long;
end;
end;
/PAR
|
<cnt_sec> - число секций таблицы
<tmp> - фиг его знает
<mat> - номер материала
<cnt_faces> - число полигонов в секции
Форматы таблиц POIN и PART радикально отличаются от текстового представления. (В POIN находится информация о текстурных координатах и всевозможные теги, которые в текстовом представлении пишутся в PART...)
Из-за этого при конвертации таблиц (основное время работы программы) результат почти всегда отличается от того, что выдает егософтовский плагин. Хотя бы потому, что таблицы упорядочены по-разному.
Таблица BONE содержит список строк-имен bone-объектов. В таблице WEIG задаются весовые коэффициенты для bone-объектов. Формат таблицы такой:
Код: |
WEIG
<cnt_point> : long;
for 1..cnt_point begin
<cnt> : word;
for 1..cnt begin
<idx> : word; <cof> : long;
end;
end;
/WEI
|
Общее число строк соответствует числу вертексов.
<cnt_point> - число вертексов
<cnt> - число зависимостей вертекса от bone'сов
<idx> - индекс bone
<cof> - коэффициент зависимости (вещественный)
Bone-объекты позволяют создавать сложные иерархические анимированные модели. Траектории движения всех частей персонажей описываются именно по этой технологии. Подробнее нужно копать Inverse Kinematic в 3d Max.
Теперь по-поводу бинарных scene-файлов.
Код: |
CUT1
INFO -- /INF // может отсутствовать
<ver> : long; <cnt> : long;
for 1..cnt begin
PATH -- /PAT
end;
/CUT
|
<ver> - номер версии scene-файла
То, что видно в текстовых scene-файлах в виде строчек типа
"P 0; B -1; N Camera01; c" - вот это и описано в заголовке структуры PATH
Код: |
PATH
<заголовок>
NAME -- /NAM
CONS -- /CON
NOTE -- /NOT
BOB1 -- /BOB
STAT -- /STA
/PAT
|
NAME - поле содержит строку - имя (в примере выше "Camera01")
CONS - таблица содержащая дополнительные параметры меша сюда вставляются параметры IK Chain Object, заданные в Максе. Например, в нижеследующей строке, параметры после K описываются именно этой таблицей:
P 23; B 100023; N IK Chain01; K 3; 20;0.499985; 12;0.099991; 13;0.299988;
NOTE - это таблица содержит список событий для организации интерактива взаимодействия с игроком, диалогов и пр... Как генерить в Максе пока не понятно. Позволяет управлять последовательностью загрузки отдельных кусков/мешей, запускать саунд-треки, реагировать на мышу и пр...
STAT - таблица анимационных кадров. Формат таблицы разобрать до конца не удалось. Число и формат параметров зависит от тега. Тег, похоже, представляет собой битовую маску. В связи с дикой нехваткой времени , все известные теги тупо перечислены в конфиге программы, так чтобы можно было дополнять/редактировать. Требуется творческий анализ и доработка... и выведения общего алгоритма на все случаи.
Кроме перечисленных здесь возможностей в scene-файлах существует возможность запускать/вставлять саунд-треки (предположительно). Для этого специально существует команда SND1 -- /SND. Формат незвестен. Как это описывается в Максе я не нашел.
Практическая часть.
Программка в стадии пред-альфа версии. Сама разбирает бод/сцене/комбинед... Использовать сконвертированные файлы в игре я не пытался... Однако BODViewer исправно все казал. Текстурные координат вставляются верно.
Чего не сделано, не доделано.
1. Как бы расковырять алгоритм формирования анимационных кадров. Можно, конечно, попробовать дизассемблировать плагин егософта, но времени - увы
2. Возможны просто ошибки... Работаем, когда есть время...
PS
В качестве отмазки на вопрос "Нафига это надо?" сразу отвечу:
1. Существуют модели кораблей/станций, которые наличиствуют только в виде BOB. Иногда интересно посмотреть как они сделаны, может быть даже использовать некоторые детали.
2. Особый интерес вызывают scene-файлики. Там есть чему поучиться.
Интересно посмотреть на выдранные модели БенДанов и др... И озадачиться наличием 15 пальцев прописанных у персонажей
3. (Этак мечтательно) Вот бы нарисовать супер-пупер заставку к ЕГешному моду. Вместо nVidea. От нее все равно толку никакого! И станцию вставить в игру, на верхней площадке которой ездит манипулятор и ящики переставляет
Итак, если есть у кого силы/время посмотреть-потестить - пишите. )
|
|
|
Tnax
270 EGP
    Рейтинг канала: 1(3) Репутация: 52 Сообщения: 930 Откуда: Russia, Voronezh Зарегистрирован: 20.01.2004
 |
|
Scene файлы для хааков можно посмотреть уже сейчас, они в обычном bod. И сразу видно, что чёткой структуры нетути (т.е. что и после чего идёт).
А может Бенданна потом в монстра превратится
с 1. согласен, удобнее было бы чуть подправить, чем заново самому перерисовывать.
_________________ Люблю когда прицел... вдруг синевеет! :) |
|
|
DFX4200
55 EGP
 Репутация: 8 Сообщения: 43 Откуда: Сергиев Посад Зарегистрирован: 11.08.2004
 |
|
Пробовал создавать Scene-файл - в игре корабль из труб(стандартных частей) получается, вроде все правильно делал...
Неработает и с обычным, и с бинари - Может я, что то пропустил??? Менял имена объектов и названия файлов - нехочет, причем трубы все те же!!! а имена 10580, 10581... - это для bod... А для scene - 04438 и пробовал за 10500... Одно и тоже получается. и некоторые оъекты видно только в космосе, а в меню они невидимые! Как исправить? Или ссылку если это есть, я не нашел... Да, и еще иногда треугольники мерцают... Это с чем связано??? И можно привязать анимацию к процессу, например высота элемента зависит от скорости???
Заранее спасибо!
|
|
|
CheckerTwo
550 EGP
     Рейтинг канала: 4(96) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004
 |
|
DFX4200:
Цитата: |
Неработает и с обычным, и с бинари
|
Увы, я не умею моделировать корабли.
Помочь с этим не смогу.
Цитата: |
И можно привязать анимацию к процессу, например высота элемента зависит от скорости???
|
К процессу - вряд ли. Анимация идет во времени.
|
|
|
Breeze
222 EGP
  Рейтинг канала: 3(30) Репутация: 90 Сообщения: 703 Откуда: Donetsk, Ukraine Зарегистрирован: 05.12.2003
 |
|
DFX4200 пересылай мне свои файлы на alex_2002_mailbox@zmail.ru, посмотрю чё у тя там (а насчёт мерцания - так это из-за бампа, или отражений, это типа нормально )
CheckerTwo вот это круто очень полезная инфа, обязательно надо всё довести до ума
_________________ 'Слова искажают правду' © |
|
|
CheckerTwo
550 EGP
     Рейтинг канала: 4(96) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004
 |
|
На текущий момент все проверил, погонял по всем доступным bob-файлам. Вроде работает. Бинарные боди-файлы восстанавливает "на ура".
Со сцене-файлами остались 2 проблемы:
Первая - как бы разгрызть формат параметров анимационных кадров в зависимости от тега.
Где целые, где - вещественные...
Вторая - существует дополнительный тег в строке описания
меша, ставится после имени (N). Например:
P 0; B -1; N Camera01; c - тег 'c' указывает на класс CAMERA_CLASS_ID и имеет значение 0x01
P 2; B 1375; N B1375sc; l - тег 'l' указывает на класс OMNI_LIGHT_CLASS_ID = 0x0A (источник света)
Но cуществуют еще по-крайней мере 2 тега со значениями 0x02 и 0x20.
И пока для них не известно текстовое представление.
Первый (0x02), предположительно, как-то связан с Direct-объектами.
Кто-нибудь встречал?
Желающим могу отправить программку по почте...
|
|
|
DFX4200
55 EGP
 Репутация: 8 Сообщения: 43 Откуда: Сергиев Посад Зарегистрирован: 11.08.2004
 |
|
Brize : |
DFX4200 пересылай мне свои файлы на alex_2002_mailbox@zmail.ru, посмотрю чё у тя там (а насчёт мерцания - так это из-за бампа, или отражений, это типа нормально )
|
Пока отсылать толком нечего - все в процессе. Это я эксперементирую с тем, что пока есть и на ус мотаю -заодно и спрашиваю, чего не понятно.
А про мерцание, это странно, многие стандартные модели имеют это и не мерцают, наверное надо какие то правила соблюдать. Может размер текстур или колво метериалов? Хотя не должно... Неужели движок такой глючный
А ты с нормалями разобрался??? -там тоже есть свои фишки, если проигнорируешь - получишь не то, что надо... А вообще мощный инструмент!!! Правда, когда качество просчета ставишь на максимум, то оооочень долго считает
CheckerTwo Во времени, это значит только зацикленная анимация??? А как же хвосты от двигателей работают, или шлюзы??? Неужели в ехе прошито? Опять облом... Еще очень надо с pivot разобраться, а то, как я понял,переставить pivot и создать ключи, не значит, что получится что надо...
|
|
|
Breeze
222 EGP
  Рейтинг канала: 3(30) Репутация: 90 Сообщения: 703 Откуда: Donetsk, Ukraine Зарегистрирован: 05.12.2003
 |
|
CheckerTwo Есть желающие, есть, есть!
DFX4200 [offtop]
Цитата: |
А ты с нормалями разобрался???
|
ну, наверно да, на уровне подсознания ... У многих эгософтовских моделей тоже такая фигня есть... Я заметил что сильнее всего бамп и отражения мерцают при околонулевых углах зрения и при "пересечении" с системами частиц - выхлопами от двигателей, туманом nebulaes. Они (Эгосовтовцы) разносят двигатели как можно дальше от корпуса, и, видимо, у них возникли проблемы с отражениями т.к. они их используют на очень малых участках... Я понял что меньше всего мерцания будет если не делать "овальных поверхностей"... Ну, типа поверхность делать не так
/----------\
а так
/-----------
а ещё лучше так
------------
(т.е. типа так чтоб нормали не поворачивались более чем на 180, да?..)
Мне пока тока максовский хэлп доступен, в инете времени искать ответы нету
[/offtop]
_________________ 'Слова искажают правду' © |
|
|
CheckerTwo
550 EGP
     Рейтинг канала: 4(96) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004
 |
|
To Breeze:
Цитата: |
Есть желающие, есть, есть!
|
Отправил
All:
На текущий момент известен единственный bob-файл, содержащий расщепленную
таблицу PART. Это модель сплитского дракона 10923.bob. Так как получить
подобный формат искусственно не удалось, то эта часть программы практически
осталась неотлаженной. При этом в выходной файл пишется сообщение:
"Note: Ращепленная таблица PART."
Если вдруг попадется какой-нибудь файл, просьба сообщить в конфу или приват.
Надо еще поизучать...
|
|
|
Breeze
222 EGP
  Рейтинг канала: 3(30) Репутация: 90 Сообщения: 703 Откуда: Donetsk, Ukraine Зарегистрирован: 05.12.2003
 |
|
CheckerTwo ОК tnx. скачал, щас принесу домой буду тестить
_________________ 'Слова искажают правду' © |
|
|
CheckerTwo
550 EGP
     Рейтинг канала: 4(96) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004
 |
|
Breeze:
Цитата: |
Кстати, сделал ещё три(+одну станцию) модельки боронов, через неделю всю боронскую расу перемоделю ...
|
А посмотреть можно?
|
|
|
Ur Quan
510 EGP
      Рейтинг канала: 1(3) Репутация: 86 Сообщения: 728 Откуда: Арк-а-Зной Зарегистрирован: 25.11.2003
 |
|
Цитата: |
Да, и еще иногда треугольники мерцают... Это с чем связано???
|
Это бывает когда плоскости двух треугольников находятся в одной и той-же точке пространства.
Цитата: |
На текущий момент написана программка, конвертирующая бинарник в стандартный текстовый BOD.
|
И гдеж такую раздобыть ?
_________________ Рад видеть тебя на борту. Здесь Дом Свободы — можешь плевать на ковер и называть кота ублюдком. |
|
|
CheckerTwo
550 EGP
     Рейтинг канала: 4(96) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004
 |
|
Ur Quan:
Цитата: |
И гдеж такую раздобыть ?
|
Выложить пока-что некуда, могу выслать почтой.
Размер архива 60К.
|
|
|
DFX4200
55 EGP
 Репутация: 8 Сообщения: 43 Откуда: Сергиев Посад Зарегистрирован: 11.08.2004
 |
|
Цитата: |
Это бывает когда плоскости двух треугольников находятся в одной и той-же точке пространства.
|
Нет, в этом случае мерцания другие, а тут такое впечатление, что глючит свет, т.е. некоторые треугольники освещены, а некоторые-нет, потом меняется... иногда освещены все. Странно, но сейчас все нормально...
Цитата: |
На текущий момент написана программка, конвертирующая бинарник в стандартный текстовый BOD.
|
Милости просим на dfx4200@yandex.ru !!! Плиз!
А наоборот конвертировать будет?
|
|
|
Breeze
222 EGP
  Рейтинг канала: 3(30) Репутация: 90 Сообщения: 703 Откуда: Donetsk, Ukraine Зарегистрирован: 05.12.2003
 |
|
CheckerTwo к среде(ориентировочно) выложу мод со всеми боронскими кораблями (в субботу и воскресенье усиленно отлаживал )
_________________ 'Слова искажают правду' © |
|
|
CheckerTwo
550 EGP
     Рейтинг канала: 4(96) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004
 |
|
Ur Quan:
Завсегда - пожалуйста...
DFX4200:
Цитата: |
А наоборот конвертировать будет?
|
М-м-м... как-то не думал об этом. Пока - вряд ли получится. Информации о файлах маловато. А есть такая необходимость?
ЗЫ: Отправил.
Я программку писал несколько с другой целью.
А именно - разобраться в возможностях движка Х2. А возможности там богатые!
Сейчас на работе загрузили по уши, немного расхлебаюсь - продолжу ковыряния...
Блин, хоть бы помог кто, что ли...
|
|
|
DFX4200
55 EGP
 Репутация: 8 Сообщения: 43 Откуда: Сергиев Посад Зарегистрирован: 11.08.2004
 |
|
Поймал, огромное СПАСИИИБО! -будем смотреть!
Цитата: |
М-м-м... как-то не думал об этом. Пока - вряд ли получится. Информации о файлах маловато. А есть такая необходимость?
Я программку писал несколько с другой целью.
|
Мне бы пригодилось... Многие мелкие исправления можно было бы вносить без повторного экспорта, например, после экспорта bod-файла, не раз приходится менять параметры материалов, а загружать мах - дольше! так же и LOD настраивать удобнее...
Про саундс - есть в максе TrackView - в нем можно ставить звуковые трэки для синхронизации их с будущим видео-рядом, может где то там...
|
|
|
Ur Quan
510 EGP
      Рейтинг канала: 1(3) Репутация: 86 Сообщения: 728 Откуда: Арк-а-Зной Зарегистрирован: 25.11.2003
 |
|
Цитата: |
т.е. некоторые треугольники освещены, а некоторые-нет, потом меняется... иногда освещены все
|
А такая фигня у меня была когда нормали были гигантские (не единичный вектор, т.к. объект масштабировал через glScale а нормализацию не влючил, в результате чего дико менялась яркость, а при влючении свойств материала Ambient, Diffuse и Specular вообще при определённых углах треугольники чёрные становились).
2CheckerTwo:
Большое нечеловеческое спасибо .
_________________ Рад видеть тебя на борту. Здесь Дом Свободы — можешь плевать на ковер и называть кота ублюдком. |
|
|
DFX4200
55 EGP
 Репутация: 8 Сообщения: 43 Откуда: Сергиев Посад Зарегистрирован: 11.08.2004
 |
|
Цитата: |
А такая фигня у меня была когда нормали были гигантские (не единичный вектор, т.к. объект масштабировал через glScale а нормализацию не влючил, в результате чего дико менялась яркость, а при влючении свойств материала Ambient, Diffuse и Specular вообще при определённых углах треугольники чёрные становились).
|
Поясни пожалуйста, что значит "Нормализация" и "не единичный вектор"!!! Я думал каждый треугольник имеет только один нормаль.
|
|
|
Ur Quan
510 EGP
      Рейтинг канала: 1(3) Репутация: 86 Сообщения: 728 Откуда: Арк-а-Зной Зарегистрирован: 25.11.2003
 |
|
Цитата: |
Поясни пожалуйста, что значит "Нормализация" и "не единичный вектор"
|
"Единичный вектор" - вектор длина которого равна единице.
"Нормализация" - в OpenGL при масштабировании с помощью glScale, также трансформируются и нормали, чтобы они оставались неизменными включают нормализацию glEnable(GL_NORMALIZE).
Цитата: |
Я думал каждый треугольник имеет только один нормаль.
|
Вобще-то, номаль можно задать каждой вершине и получить эффект сглаживания:
Нормаль к треугльнику:
Нормаль к вершине:
_________________ Рад видеть тебя на борту. Здесь Дом Свободы — можешь плевать на ковер и называть кота ублюдком. |
|
|
|
|
|
Канал X2: The Threat: «X2tools: Бинарные BOB --> BOD» |
|