В этой теме я постараюсь раскрыть формат хранения 3D моделей в игре Vigilante 8 для Sony PlayStation.
Хранение вершин, нормалей, полигонов 3D модели (http://pscd.ru/forum/index.php?/topic/589-ustroistvo-3d-modelei-v-igre-vigilante-8-psx/?p=6585)
Устройство «архива» с 3D моделью (XOBFBIN) (http://pscd.ru/forum/index.php?/topic/589-ustroistvo-3d-modelei-v-igre-vigilante-8-psx/?p=6586)
Vigilante 8 3D To TMD (http://pscd.ru/forum/index.php?/topic/589-ustroistvo-3d-modelei-v-igre-vigilante-8-psx/?p=6713)- программа для просмотра 3D моделей
Хранение вершин, нормалей, полигонов 3D модели
Буду не всё разжёвывать, так как времени немного. Работать мы будем с файлом
VEHICLES.EXP. Находится он в папке
SHELL образа игры
Vigilante 8 (http://pscd.ru/games/psx/v/1276-vigilante-8.html). В этом файле
хранятся 3D модели и
текстуры автомобилей из меню выбора авто.
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-25454700-1479818149.png)
Первая модель, это модель автомобиля
67 Rattler. Данные первой модели с $
2E по $
455E.
Полигоны хранятся с $
10E по $
D62.
Точки (Вершины, нормали) – с $
D62 по $
11EA Того получается
Полигонов:
145 (примерно)
Точек:
145 (http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-69731900-1479818139.png)
Точка занимает
8 байт.
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-90275400-1479818139.png)
Устройство примерно следующие. Сначала идут координаты
X, Y, Z затем стопбайт (хотя он не используется -
визуальный). Каждая из координат занимает
2 байта.
Устройство точек точно такое же, как и в моделям
TMD.
Скорее всего сначала идёт блок вершин, а потом блок нормалей. С полигонами всё намного сложнее. Придётся рассмотреть много вариантов.
Полигоны записаны в «блоке». То есть там есть информация как о полигонах, так видимо и о текстурах.
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-10265800-1479818140.png)
Первый, так называемый, «блок» занимает
24 байта.
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-30474700-1479818140.png)
Информация о полигоне идёт через
4 байта с начала блока и
занимает 6 байт.
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-94341800-1479818148.png)
Полигон представляет собой треугольник.
Теперь немного о самих блоках.
Первые
4 байта информация которая поможет нам понять, как будет устроен блок. Следующие
6 байт - это
полигон. Все остальные байты, судя по всему информация о текстурах.
Рассмотрим варианты.
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-52812100-1479818140.png)
XX XX XX 09 - Данная структура говорит нам о том, что следующий блок будет через
20 байт.
Красной полосой обозначены
20 байт, зелёной – следующий информационный блок.
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-69057800-1479818140.png)
XX XX XX 05 - Данная структура говорит нам о том, что следующий блок будет через
16 байт.
Цвета и полоски на картинки не несут смысловой нагрузки. (http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-87372900-1479818140.png)
XX XX XX 08 – Данная структура говорит нам о том, что следующий блок будет через
12 байт.
Красной полосой обозначены
12 байт, зелёной – следующий информационный блок.
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-12054400-1479818141.png)
XX XX XX 04 – Данная структура говорит нам о том, что следующий блок будет через
8 байт.
Цвета и полоски на картинки не несут смысловой нагрузки. XX XX XX 0C - Данная структура говорит нам о том, что следующий блок будет через
16 байт.
XX XX XX 2C - Данная структура говорит нам о том, что следующий блок будет через
16 байт.
XX XX XX 00 - Данная структура говорит нам о том, что следующий блок будет через
8 байт.
XX XX XX 1D - Данная структура говорит нам о том, что следующий блок будет через
20 байт.
XX XX XX 1F - Данная структура говорит нам о том, что следующий блок будет через
20 байт.
Мог где-то запутаться, но примерно как-то так.
Устройство «архива» с 3D моделью (XOBFBIN)
Работать мы будем с файлом
VEHICLES.EXP. Находится он в папке
SHELL образа игры
Vigilante 8 (http://pscd.ru/games/psx/v/1276-vigilante-8.html).
Будем работать с архивом (банком), который содержит в себе
3D модели колёс и плоскостей.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-1-0-24380100-1480685911.png)
Начало архива: $
44542Конец архива: $
4E352Количество моделей в архиве:
12 (http://pscd.ru/forum/uploads/monthly_12_2016/post-1-0-47219700-1480685911.png)
00 00 9E 08 –
размер архива с 3D моделями. Размер составляет
40456 байт (
9E 08), данные хранятся в неперевёрнутом виде. Отсчёт идёт после этих
4 байт с размером ($
4454A).
(http://pscd.ru/forum/uploads/monthly_12_2016/post-1-0-71831500-1480685911.png)
C0 00 00 00 –
Количество 3D моделей в архиве. В нашем случае в архиве хранится
12 моделей.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-1-0-95405000-1480685911.png)
6С 01 00 00 – Указатель через сколько байт будут интересующие нас данные о 3D моделях. Отсчёт идёт с $
44556.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-1-0-12024300-1480685912.png)
Переходим на $
446C2.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-1-0-29053200-1480685912.png)
Здесь в начале идёт
12 указателей на 3D модели. Отсчёт начинается с $
446C2.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-1-0-45005700-1480685912.png)
94 2B 00 00 – указатель на информацию о текстурах. Отсчёт начинается с $
446C2.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-1-0-65217700-1480685912.png)
Переходим по первому указателю (
34 00 00 00) в $
446F6.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-1-0-89947600-1480685912.png)
Здесь
28 байт занимает «служебная» информация о модели.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-1-0-07274000-1480685913.png)
18 00 00 00 –
количество вершин (точек) в 3D модели. В нашем случае это
24 точки.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-1-0-60378700-1480686298.png)
EC 01 00 00 –
указатель на точки (вершины). Отсчёт начинается с $
446F6.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-1-0-76642200-1480686298.png)
12 00 00 00 –
количество нормалей (точек) в 3D модели. В нашем случае это
18 точки.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-1-0-00092900-1480686299.png)
AC 02 00 00 –
указатель на точки (нормали). Отсчёт начинается с $
446F6.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-1-0-17199300-1480686299.png)
14 00 00 00 –
количество полигонов в 3D модели. В нашем случае это
20 полигонов.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-1-0-35730400-1480686299.png)
(http://pscd.ru/forum/uploads/monthly_12_2016/post-1-0-61438000-1480686299.png)
1C 00 00 00 –
указатель на полигоны. Отсчёт начинается с $
446F6.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-1-0-81406200-1480686299.png)
0A 00 –
Размер (масштаб) 3D модели (http://pscd.ru/forum/uploads/monthly_12_2016/post-1-0-02789900-1480686300.png)
86 00 – не удалось установить
Для наглядности изображение первой модели из данного архива.
Там сверху в Хранение вершин, нормалей, полигонов 3D модели (http://pscd.ru/forum/index.php?/topic/589-ustroistvo-3d-modelei-v-igre-vigilante-8-psx/?p=6585) не совсем корректные данные правильней будет так:
a=0x10e;
...
if(traceL[a+3]==0x09){aaPl=24;}
if(traceL[a+3]==0x05){aaPl=20;}
if(traceL[a+3]==0x0C){aaPl=20;}
if(traceL[a+3]==0x08){aaPl=16;}
if(traceL[a+3]==0x04){aaPl=12;}
...
a+= aaPl;
Проверил, всё именно так как написано в сообщение выше.
Авто:
'70 Clydesdale(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-81868000-1479827689.png)
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-32693900-1479827689.png)
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-35713800-1480107149.png)
Нашёл модель
laydion2.TMD, вставил в
V8. На скринах смотрится так себе, в живую намного лучше.
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-42816900-1480107150.png)(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-67554200-1480107150.png)(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-20838600-1480107151.png)
Вот это круто, подобного для PSX, по-моему, ещё никто не делал.
Не просто заменили одну 3D модель на другую, а создали совершенно новую. Очень сложный процесс, на мой взгляд. Хорошо, что есть такие талантливые люди.
Цитата: PSXDev от 26 ноября 2016, 14:34Вот это круто, подобного для PSX, по-моему, ещё никто не делал.
Сильное заявление, есть много примеров, где творили ещё больше.
К примеру, Leo2236 разработал утилиту для Resident Evil, которая умеет делать с локациями почти всё.
http://lgt.createaforum.com/new-board-17/rdtexplorer-a-tool-to-edit-rdt-files/
Цитата: TTEMMA от 26 ноября 2016, 18:39
Цитата: PSXDev от 26 ноября 2016, 14:34Вот это круто, подобного для PSX, по-моему, ещё никто не делал.
Сильное заявление, есть много примеров, где творили ещё больше.
Речь, конечно же, идёт о ру ретро сцене. И это исключительно моё мнение. Не стоит здесь разводить риторику не по теме.
Добавил информацию Устройство «архива» с 3D моделью (XOBFBIN) (http://pscd.ru/forum/index.php?/topic/589-ustroistvo-3d-modelei-v-igre-vigilante-8-psx/?p=6586)
Кое-что выяснил по текстурам.
Работаем с файлом
HOOVRDAM.EXP.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-95-0-40745800-1480773969.png)
Рассмотрим первый полигон ящика со знаком вопроса.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-95-0-66103200-1480773969.png)
(http://pscd.ru/forum/uploads/monthly_12_2016/post-95-0-16398400-1480773969.png)
Последние два байта (
0C 00) – номер текстуры. В данном случае это
13 текстура поскольку отсчёт ведётся от нуля.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-95-0-96529700-1480773969.png)
Размер исходного изображения (40x40) в пикселях , пока точно как там всё устроено установить не удалось.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-95-0-19281200-1480773970.png)
Для примера
(http://pscd.ru/forum/uploads/monthly_12_2016/post-95-0-86686600-1480773968.png)
(http://pscd.ru/forum/uploads/monthly_12_2016/post-95-0-96529700-1480773969.png)
Если кто-то может что-то прояснить по этому поводу буду благодарен. Там ещё как-то с их помощью что ли можно крутить текстуры.
Что-то мне подсказывает, что это UV-преобразование (Развёртка). Но как она устроена...
Разобрался.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-95-0-25494900-1480844440.png)
Это
координаты трёх точек. Условно можно считать, что первый байт это
X, а второй -
Y.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-95-0-16398400-1480773969.png)
Изображение ящика
40x
40 Координаты представлены в пикселях.
Первая точка (
0, 39)
Вторая точка (
0, 0)
третья точка (
39, 0)
(http://pscd.ru/forum/uploads/monthly_12_2016/post-95-0-84175700-1480844438.png)
Отсчёт ведём от верхнего левого угла.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-95-0-04251400-1480844439.png)
Из трёх точек составляем треугольник.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-95-0-26871700-1480844439.png)
Стрелка указывает направление.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-95-0-99618900-1480844439.png)
И ещё один пример для большего понимания.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-95-0-76289700-1480844439.png)
Изображение зеленого ящика
48x
48Первая точка (
0, 0)
Вторая точка (
47, 0)
третья точка (
47, 47)
(http://pscd.ru/forum/uploads/monthly_12_2016/post-95-0-51011500-1480844439.png)
P.S. В данном методе максиальный размер текстуры 256x256. Возможно в каких-то методах этот размер больше.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-95-0-99810000-1480847709.png)
Обнаружил, что первые три байта это палитра RGB.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-95-0-04732400-1480847814.png)
Пример
(http://pscd.ru/forum/uploads/monthly_12_2016/post-95-0-80463500-1480847709.png)
Молодец, настолько подробного и понятного разбора данных 3D игры для PSX, да и не только, ещё никто никогда не делал. Продолжай в том же духе.
Некогда бы не подумал, что 3D графика строится треугольниками, особенно квадраты.
Если вам удалось заменить текстуру деревянного ящика 40x40, на ящик зелёный военный 48x48.
Можно ли говорить о том, что размер картинки (самой текстуры) не учитывается, а если это так, то выходит, что можно повысить качество текстур? Например, сделав их в HD.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-5-0-35000100-1480852579.png)
Раз можно менять цвета, то может разрабы хотели сделать такую функцию как и во второй части v8. Или даже сделали, но она недоступна.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-95-0-10852500-1480857651.png)
Написал программу
Vigilante 8 3D To TMD. С её помощью можно
просмотреть 3D моделей из игр Vigilante 8 (http://pscd.ru/games/psx/v/1276-vigilante-8.html). Если быть более точным, то это не просмотрщик, а
конвертер из формата
3D моделей V8 в TMD.
Скачать
Vigilante 8 3D To TMD:
Программа сохраняет
3D модели из игры
V8 в *.
TMD, после чего их можно просмотреть, например в
MilkShape 3D.
(http://pscd.ru/forum/uploads/monthly_12_2016/post-95-0-01843100-1480857650.png)
Рад что кто то продолжает мое дело), хорошее дело делаешь, мне так лень было писать документацию подробную, я к стати вылаживал распаковщик моделей и скрипт для 3д макса чтоб модели грузить (просматривать) единственное не хватило знаний Max scriptа чтоб текстуры наложить на модели
На счет палитры она вроде если память не изменяет используется для моделей без текстур, и вроде для моделей в далеке.
Вот бы какой программист написал программу для просмотра моделей, а то я совсем программирование забросил, я бы поддержал подсказками об структуре моделей.
К стати в FORM файле (где хранятся модели) после XOBFBIN и всей информации идет описание моделей их данные
Это для second offence, но мне кажется что и в первой части тоже самое
Цитата: DenGame от 26 февраля 2017, 13:53К стати в FORM файле (где хранятся модели) после XOBFBIN и всей информации идет описание моделей их данные
Это для second offence, но мне кажется что и в первой части тоже самое
(http://pscd.ru/forum/public/style_images/master/attachicon.gif)44556.PNG (http://pscd.ru/forum/index.php?app=core&module=attach§ion=attach&attach_rel_module=post&attach_id=4422)
(http://pscd.ru/forum/public/style_images/master/attachicon.gif)645754745.PNG (http://pscd.ru/forum/index.php?app=core&module=attach§ion=attach&attach_rel_module=post&attach_id=4423)
А конкретно что за данные?
Что за программа на втором скрине?
где что будет находиться (координаты) колеса кузов, оружие (вроде) и остальные данные. на втором скрине Notepad++ это я таблицу составлял когда разбирался что за что отвечает))))
(https://pp.vk.me/c617928/v617928992/156d/kOtxHpO5ptA.jpg)
Вот к стати кое что вспомнил про полигоны можешь дополнить свою документацию
Это те значения (2 байта) которые стоят перед координатами текстуры
Там что ли градиент используется, так и не понял
DenGame, Есть данные по другим ID?