Форум PSCD.ru

Игровые приставки и Эмуляция => Ромхакинг и программирование => Уроки / Документация => Тема начата: SPOT от 12 апреля 2016, 10:10

Название: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 12 апреля 2016, 10:10
В этой статье я хочу рассмотреть формат хранения текстур (графических изображений) в игре Quake 2 (http://pscd.ru/games/psx/q/9-quake-ii.html) для Sony PlayStation. Так же думаю будет полезно ознакомится с темой «TIM файлы – Формат хранения графики PSX (http://pscd.ru/forum/index.php?/topic/360-tim-faily--format-khraneniia-grafiki-psx/)».
Инструкция по Формат хранения графики в игре Quake II будет полной, а вот про файл, где хранятся текстуры не совсем. Так же пока мне не удалось найти файл, где хранится палитра. Но это в принципе не столь важно, так как нас интересует принцип хранения графики, к тому же это что-то вроде сжатия.
Не помещает помощь экспертов, может кто опознает, что за формат сжатия используется для хранения текстур. Поможет найти палитру и т.п. В принципе, любая помощь будет полезна.
В завершение я хочу попробовать написать просмотрщик текстур, исключительно для проверки, так ли всё работает как я опишу в этом документе.
Думаю, по мере написания статья может правиться. Что-то дополняться, исправляться, уточнятся и т.п.
 
 
Устройство файла SNDVRAM.DAT (http://pscd.ru/forum/index.php?/topic/492-quake-ii-tekstury-grafika-psx/?p=5731)
Хранение текстур (графики / изображения) (http://pscd.ru/forum/index.php?/topic/492-quake-ii-tekstury-grafika-psx/?p=5732)
 
Устройство 3D модели (http://pscd.ru/forum/index.php?/topic/492-quake-ii-tekstury-grafika-psx/?p=5733)
Хранение вершин и нормалей в 3D модели (http://pscd.ru/forum/index.php?/topic/492-quake-ii-tekstury-grafika-psx/?p=5734)
Хранение полигонов и информации об объектах в 3D модели (http://pscd.ru/forum/index.php?/topic/492-quake-ii-tekstury-grafika-psx/?p=5735)
Подмена 3D моделей (http://pscd.ru/forum/index.php?/topic/492-quake-ii-tekstury-grafika-psx/?p=5776)
 
Устройство файла ZONE0.DAT (http://pscd.ru/forum/index.php?/topic/492-quake-ii-tekstury-grafika-psx/?p=5736#entry5736) (В подобных файлах хранятся 3D уровни)
 
Q2 Textures Viewer – программа для просмотра текстур (http://pscd.ru/forum/index.php?/topic/492-quake-ii-tekstury-grafika-psx/?p=5749)
Q2 Textures Viewer v.1.1 (http://pscd.ru/forum/index.php?/topic/492-quake-ii-tekstury-grafika-psx/?p=5796)
 
HammerHead 3D To TMD - программа для просмотра 3D моделей (http://pscd.ru/forum/index.php?/topic/492-quake-ii-tekstury-grafika-psx/?p=5905)
 
HammerHead 3D Map To PLY - программа для извлечения 3D моделей уровней (http://pscd.ru/forum/index.php?/topic/492-quake-ii-tekstury-grafika-psx/page-4#entry11076)
 
Полезная информация:
Quake II скрытые уровни (http://pscd.ru/forum/index.php?/topic/491-quake-ii-skrytye-urovni-psx/)
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 12 апреля 2016, 10:10
Устройство файла SNDVRAM.DAT
 
Начнём с краткого обзора файла SNDVRAM.DAT. Это файл в котором хранятся текстуры и звуки.
Файл разделён на две области, в одной хранятся текстуры, а в другой звуки.
Для примера будем рассматривать файл находящийся по адресу Q2DATA -> LEVELS  -> QLOGOS2  -> SNDVRAM.DAT.
Открываем его в Hex-редакторе:
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-10826400-1460450481.png)
На рисунке изображён фрагмент файла (вид в Hex-редакторе), если быть более точным, то это «заголовок». Его-то в данном сообщение мы и рассмотрим.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-36260100-1460450481.png)
Первые 4 байта всегда = 0x0C000000.
Это указатель на 0Ch, это первая часть файла, тут хранятся текстуры. Переворачиваем и получаем значение 0000000С.
 
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-59803800-1460450481.png)
Назначение следующих 4 байта.
Это указатель на следующую область файла, в ней хранятся звуки. Переворачиваем данные и получаем указатель на $45264.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-75472400-1460450481.png)
Размер файла. Отсчёт начинается с самого начала 0h. Напомню, что данные хранятся в перевёрнутом виде. В файле данные имеют вид F8 C0 06 00. Мы их переворачиваем и получаем 00 06 C0 F8. Следовательно размер данных (файла) составляет 0x06C0F8.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-92470800-1460450481.png)
Назначение следующих 4 байта.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-62791900-1461245340.png)
Данный байт (02) обозначает сколько в файле (архиве) SNDVRAM.DAT хранится файлов с расширением *.opt. В нашем случае это два (2) файла tp0.opt и tp1.opt.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-79522600-1461245340.png)
Далее так же идёт один байт (04). Он обозначает сколько в файле (архиве) SNDVRAM.DAT хранится файлов с расширением *. lbm. В нашем случае это четыре (4) файла chars.lbm, Legal.lbm, HamLogo.lbm и frontend.lbm.
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-96904300-1461245340.png)
Эти два байта (11 13) связаны с файлами *.opt. Что это конкретно, я пока не выяснил. Возможно количество элементов в одном изображении. Но данные байты нам важны для вычисления сколько место ниже отведено под *.opt.
 
Место, отведённое под *.opt, вычисляем по следующий формуле.
 
($F + $E - 16) * 0x20
 
В нашем случае:
(0x13 + 0x11 - 16) * 0x20  =  640 [280h]
 
0x20 в десятеричной системе равно 32. Видимо столько отведено под один элемент в изображении типа opt.
 
640 байт отведено тут под как-то данный для opt файлов.
 
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-12017700-1460450482.png)
Дальше идут данные по текстурам (графике).
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-30249900-1460450482.png)
Нас интересуют только текстуры, без пустого места под ними. Тут находится информация о шести текстурах с $10 по $3F включительно.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-48050300-1460450482.png)
Информация об одной текстуре (графическом элементе) занимает 8 байт.
Если говорить коротко сначала идёт указатель (поинтер) на графические данные, а потом ширина и высота.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-69041800-1460450482.png)
В начале идёт указатель на графику (текстуру), он занимает 4 байта. Напомню, что данные хранятся в перевёрнутом виде. В файле данные имеют вид F1 0C 00 00. Мы их переворачиваем и получаем 00 00 0C F1. Поинтер (указатель) имеет вид 0x0CF1.
Отсчёт указателя начинается с $C. То есть, чтобы узнать, где начало графики нам нужно к указателю добавить 0xС.
 
0x0CF1+0xС = 0xCFD [CFDh].
 
CFDh – тут начинаются «картинка».
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-85507300-1460450482.png)
2 байта = Ширина
 
Данные 2 байта обозначают Ширину изображения. В файле данные имеют вид 80 00. Мы их переворачиваем и получаем 00 80.  Это 128 пикселей. То есть Ширина изображения = 128 пикселей.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-77996600-1460450489.png)
2 байта = Высота
Данные 2 байта обозначают Высоту изображения. В файле данные имеют вид 00 01. Мы их переворачиваем и получаем 01 00.  Это 256 пикселей. То есть Высота изображения = 256 пикселей.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-93326000-1461246393.png)
После данных о текстурах идёт 512 байт пустоты с $40 по $240. Это конечно не буквальная пустота, а мусор из байт 00 80. Но никакого практического применения им нет.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-18820000-1461246394.png)
Далее идут те самые данные об *.opt файлах, которые мы вычисляли выше по формуле. 640 байт с $240 по $4C0.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-95883400-1461247009.png)
Далее идёт палитра первого изображения формата lbm. В нашем случае это палитра для файла chars.lbm. Палитра занимает 512 байт с $4C0 по $6C0. Эта палитра в формате TBGR / A1B5G5R5. Как её перевести в цвета написано в TIM 16-bit (actual colors) [TBGR / A1B5G5R5] (http://pscd.ru/forum/index.php?/topic/360-tim-faily--format-khraneniia-grafiki-psx/?p=3647).
После идёт ещё три палитры для Legal.lbm, HamLogo.lbm и frontend.lbm.
 
После палитры идёт названия файлов.
 
По основной информации всё. Пожалуй, так же стоит упомянуть, что каждое из изображений имеет название (быть может это исходный файл).
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-02432000-1460450490.png)
Названия идут в том же порядке, что и изображения. Названия разделены между собой байтом 00.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-28747300-1460450490.png)
Видим что первому элементу соответствует название tp0.opt.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 12 апреля 2016, 10:10
Хранение текстур (графики / изображения)
 
Переходим к самой интересной части, собственно говоря ради чего и была затеяна тема. Это формат хранения графики (текстур). Если разобраться в данном сжатие нет ничего сложного.
Продолжаем рассматривать всё тот же файл SNDVRAM.DAT хранящийся по адресу Q2DATA -> LEVELS -> QLOGOS2 -> SNDVRAM.DAT.
 
Чтобы было проще будем рассматривать самое первое лого, которое мы видим при загрузке игры.
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-43828000-1460459051.png)
К сожалению изображение тёмное и особо яркими цветами не пестрит. Так что рассматривать пиксели будет сложно.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-57157200-1460458974.png)
Повторятся не буду, сразу приведу данные об изображении.
Название: Legal.lbm
Начало графики (изображения) – A0E9h
(0xA0DD+0xС = 0xA0E9 [A0E9h].)
Ширина - 512 пикселей
(200h)
Высота – 240 пикселей
(F0h)
Судя по всему, максимальное число цветов изображение 256.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-82367500-1460458974.png)
Переходим в Hex-редакторе по адресу A0E9h. Это начало графических данных. С ними мы и будем разбираться в этом сообщении.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-10688900-1460458975.png)
Большинство данных идут подряд парами по 2 байта.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-27694700-1460458975.png)
Первый байт отвечает за количество пикселей в изображении, второй байт – это какай цвет в палитре из 256
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-45465500-1460458975.png)
Значение FC выведет 5 пикселей.
 
Табличка для наглядности:
FF – 2 пикселя
FE – 3 пикселя
FD – 4 пикселя
FC – 5 пикселей
...
F1 – 16 пикселей
F0 – 17 пикселей
EF – 18 пикселей
EE – 19 пикселей
...
81 - 128 пикселей
80 - 129 пикселей (Максимальное значение)
 
Минимальное количество пикселей, выводимых таким способом равно 2. Максимальное – 129.
Количество выводимых пикселей можно рассчитать по формуле.
 
0xFF – Число + 0x2.
 
Пример:
0xFF – 0xFC + 0x2 = 5 пикселей.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-66095000-1460458975.png)
00 – это номер цвета в палитре.
Точно не уверен, но что-то мне подсказывает, что счёт цвета в палитре идёт «задом на перёд».
То есть в случае с 00 это 256 цвет в палитре. Если будет FF – то это 1 цвет. FE - 2 цвет и т.д. Но это только догадки.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-89142200-1460458975.png)
По адресу $A0F1 мы встречаем ранее не рассмотренный случай. Если до этого всё было стандартно, то теперь мы видим значение байта равное 01. Не буду ходить, вокруг да около.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-06804400-1460458976.png)
Это значение сколько пикселей подряд будут идти (сколько пикселей (байт) считывать). В нашем случае это 2 пикселя (байта).
 
Табличка для наглядности:
00 – 1 пиксель
01 – 2 пикселя
02 – 3 пикселя
...
 
Судя по всему, так может идти до 7F. Но я не проверял.
 
 
В принципе на это всё!
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 12 апреля 2016, 10:11
Устройство 3D модели
В целом почти всё понятно для построения 3D модели, но остаются кое-какие неизвестные.
 
(http://pscd.ru/uploads/posts/2012-01/1325934313_quake-2.jpg)
Работать мы будем с 3D моделью логотипа Q2.
Данная модель находится в файле COMMON.DAT по адресу Q2DATA -> LEVELS -> QFRONT. Но 3D модели так же хранятся и в других файлах, например, ZONE0.DAT.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-37107500-1462620523.png)
Начиная с $33F0.
 
Мы извлечём модель в отдельный файл Qmodel, так с ней будет проще работать.
Внимание! Теперь отсчёт будет вестись с $0, а не с $33F0.

 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-59968000-1462620523.png)
Заголовок состоит из 8 байт. Второй и третий байт в заголовке могут меняться.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-77232800-1462620523.png)
Следующие 12 байт занимает имя 3D модели. В нашем случае это Q2LOGO.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-96464300-1462620523.png)
Два байта с $14 это количество полигонов в 3D модели. В нашем случае это 281 (0x0119) полигон. Помните, что данные хранятся в перевёрнутом виде.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-13084800-1462620524.png)
Следующие два байта это количество объектов в модели. В нашем случае оно равно 6.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-34707700-1462620524.png)
Предназначение следующих 8 байт установить не удалось.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-52480500-1462620524.png)
4 байта начиная с $20 это указатель на построение полигонов. Отсчёт начинается с $00. В нашем случае указатель равен $00000EC8.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-72120500-1462620524.png)
Следующие 4 байта это указатель на вершины (точки) и нормали. Указатель - $00000040
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-89540100-1462620524.png)
4 байта – указатель на информацию о построение объектов. Указатель - $00000E98
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-07089000-1462620525.png)
4 байта – указатель, скорее всего на свойства модели. В нашем случае он равен $00002058
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-92107500-1462620529.png)
Ещё четыре указателя по 4 байта. Возможно последний указатель указывает на начало следующий модели.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 12 апреля 2016, 10:11
Хранение вершин и нормалей в 3D модели
Ранее мы узнали адрес хранения вершин и нормалей.
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-23314800-1462624208.png)
Вершины и нормали хранятся с $40 по $ E98. Они занимают 3672 байт.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-48203600-1462624208.png)
Одна "точка" занимает 6 байт.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-62787300-1462624208.png)
Первые 2 байта это координата по оси X. Значение 0x0000.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-81216800-1462624208.png)
Вторые 2 байта это координата по оси Y. Значение 0x0008.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-95248600-1462624208.png)
Третьи 2 байта это координата по оси Z. Значение 0x004E.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-72648000-1462023283.png)
Первая точка это вершина модели, вторая нормаль. Так они и идут чередуясь: вершина, нормаль, вершина, нормаль...
 
Теперь расшифруем координаты для наглядности. В качестве примера возьмём первую нормаль:
FF0F 0000 F6FF
Переворачиваем
0FFF 0000 FFF6
Это будет
4095 0 -10
 
Максимальное число: 7FFFh = 32767
Минимальное число: 8000h = -32767
Отрицательное число начинается когда первый перевёрнутый байт равен или больше 0x80. -1 это 0xFFFF.
 
То есть вычисляем по формуле:
 
(0xFFFF – 0xXXXX + 1) * (-1)
Пример для наглядности:
(0xFFFF – 0xFFF6 + 1) * (-1) = -10
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 12 апреля 2016, 10:11
Хранение полигонов и информации об объектах в 3D модели
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-26693600-1462635014.png)
Вспомогательная информация об объектах начинается с $E98 по $EC8 и занимает 48 байта. Напомню, что всего у нас 6 объектов.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-45429100-1462635014.png)
На хранение данных об одном объекте нужно 8 байт.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-61508800-1462635014.png)
Первые 2 байта (хотя может второй байт относится к чему-то другому) это количество полигонов в объекте (модели). В нашем случае 61 (0x3D) полигон.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-77444200-1462635014.png)
Следующий байт, это сколько нужно вычесть (отнять) от точек. Сложно объяснить, в конце будет приведён пример, возможно из него станет ясно.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-92805400-1462635014.png)
Ещё 1 байт это количество используемых точек в этом объекте. В нашем случае оно равно 66 (0x42) точкам.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-08927100-1462635015.png)
Последние 4 байта возможно тоже могут содержать какую-то информацию, или планировалось их под что-то использовать.
 
Полигоны
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-44211400-1462635015.png)
Информация об построение полигонов начинается с $EC8 по $2058. Всего у нас 281 полигон.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-24304400-1462635015.png)
Как мы узнали из информации об объектах, первая модель состоит из 61 полигона. Начинается с $EC8 по $1298. Занимает 976 байт.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-62341600-1462635015.png)
Информация о первом полигоне занимает 8 байт.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-77135800-1462635015.png)
Первые четыре байта это соединение четырёх вершин (точек) между собой. По 1 байту на точку.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-70600200-1462635021.png)
Идём из 0 точки в 1, потом из первой во 2, из второй в 3, и из третий возвращаемся в нулевую.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-20274600-1462635021.png)
Следующие 12 байт, скорее всего какая-то информация об текстуре.
 
Хочу заметить, что максимальное число точек в модели 256.
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-36976600-1462635021.png)
При построение следующего объекта отсчёт начинается с 00. К вершинам (точкам) нужно добавить количество точек, используемое в предыдущих моделях и отнять своё число.
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-52934100-1462635021.png)
 
0x00 + 0x42 - 0x00= 0x42
0x01 + 0x42 - 0x00= 0x43
0x02 + 0x42 - 0x00= 0x44
0x03 + 0x42 - 0x00= 0x45
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 12 апреля 2016, 10:11
Устройство файла ZONE0.DAT
(Будет очень краткий обзор, только тех фрагментов которые нам будут необходимы)
Начнём с краткого обзора файла ZONE0.DAT. Это файл в котором хранятся данный о игровой карте (локации, уровне). Проще говоря в нём хранится 3D карта уровня.
Для примера будем рассматривать файл находящийся по адресу Q2DATA -> LEVELS  -> BASE0  -> ZONE0.DAT.

Открываем его в Hex-редакторе:
(http://pscd.ru/forum/uploads/monthly_02_2020/post-1-0-76089500-1581341238.png)
Тут мы видим список параметров, которые присутствуют в файле. Есть ещё пара параметров, которых в данном фале нет.
Первые 12 байт это название параметра, следующие за ними 4 байта - указатель (поинтер). Напомню что здесь перевёрнутые указатели.
Нас же интересуют следующие:

Scene (указатель: 0x32C)
MapMod (указатель: 0x898C)
Points (указатель: 0x1F4B8)

Из Scene мы будем узнавать параметр, который нам понадобится для MapMod.

В MapMod хранится информация о полигонах.

В Points находится информация о точках (вершинах).

Последний параметр подчёркнутый зелёным это размер файла (0xA89004 -> 0x490A8).

Переходим по первому указателю 0x32C.
 
(http://pscd.ru/forum/uploads/monthly_02_2020/post-1-0-77158700-1581341244.png)
Тут находится блоки информации о моделях. Один блок занимает 52 байта.
Нас интересует первые 4 байта. Это указатель для MapMod. Он говорит о том, где находится информация о полигонах для каждой 3D модели.
 
(http://pscd.ru/forum/uploads/monthly_02_2020/post-1-0-19322000-1581341250.png)

Теперь переходим по указателю из MapMod - 0x898C. Тут хранится информация о полигонах. Отсчёт поинтеров взятых из Scene начинается с 898Ch.
То есть первый блок информации находится 0x898C + 0x0000 = 0x898C. Второй - 0x898C + 0x005С = 0x89E8.
 
(http://pscd.ru/forum/uploads/monthly_02_2020/post-1-0-00186200-1581341258.png)
Теперь рассмотрим сам блок с информацией, точнее ту часть которая нас интересует.
Первые 2 байта расположенные по адресу 898Ch это количество полигонов в модели.
Затем через 8 байт по адресу 8994h идёт первый блок информации о полигоне. Он состоит из 12 байт. Нас же в нём интересуют первые 4 байты. Это построение полигона.
(http://pscd.ru/forum/uploads/monthly_05_2016/post-1-0-70600200-1462635021.png)
Как устроены полигоны в игре Quake 2 можно узнать из статьи "Хранение полигонов и информации об объектах в 3D модели (http://pscd.ru/forum/index.php?/topic/492-quake-ii-tekstury-grafika-psx/?p=5735)".
Скорее всего оставшиеся 8 байт это информация о текстурах (возможно, про цвет и освещение).
 
(http://pscd.ru/forum/uploads/monthly_02_2020/post-1-0-75544700-1581341263.png)
Далее переходим по адресу 1F4B8h указанному в Points. Тут нас ждёт информация о точках (вершинах).
В начале (первый блок) (1F4B8h) идёт информация о количестве точек и указателях на них. Второй (1FF84h) - это уже сами точки.
 
(http://pscd.ru/forum/uploads/monthly_02_2020/post-1-0-98166200-1581341271.png)
Первые 4 байта расположенные по адресу 1F4B8h это общее количество блоков с точками. Их тут 345 (0x0159).
Следующие 4 байта это указатель, в нашем случае это 0 (0x00000000). Отсчёт начинается с конца блока "указателей" с 1FF84h. Таким образом первый блок "точек" расположен по адресу 0x1FF84 + 0x00000000 = 0x1FF84.
(Второй блок точек будет расположен по адресу 0x1FF84 + 0x6C000000 = 0x1FFF0)
Последние 4 байта - это количество точек в блоке информации. В нашем случае их 9.
 
(http://pscd.ru/forum/uploads/monthly_02_2020/post-1-0-30330900-1581341277.png)
Первый блок состоящий из 9 точек находится по адресу 1FF84h. Первыми идут координаты точек (вершин) X, Y, Z. Информация о каждой точке занимает 2 байта.
Точки имеют вид:
Максимальное число: 7FFFh = 32767
Минимальное число: 8000h = -32767
Подробнее описано в статье "Хранение вершин и нормалей в 3D модели (http://pscd.ru/forum/index.php?/topic/492-quake-ii-tekstury-grafika-psx/?p=5734)".
 
(http://pscd.ru/forum/uploads/monthly_02_2020/post-1-0-27828700-1581341329.png)
Внешний вид 3D модели рассматриваемой в примере.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 12 апреля 2016, 16:35
Начал реализовывать программу просмотрщик текстур в Q2. Пока достигнутый результат говорит о том, что я всё правильно описал выше.
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-13212200-1460467869.png)
Вот результат работы программы. Это второе лого, которое можно увидеть при запуске игры.
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-16454000-1460468074.png)
То, как лого выглядит в игре.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: PSXDev от 13 апреля 2016, 09:55
Спасибо за ваш труд, ещё нигде не встречал, что бы так подобно разжевали эту тему. Получается она задевает и тему запаковки и распаковки графики. Буду следить за темой и ждать просмотрщика тексту в играх для PSX.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 13 апреля 2016, 15:42
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-05491900-1460551227.png)
 
Завершил написание программы для просмотра текстур (графики) в игре Quake 2 для PSX. Где хранится палитра так найти и не удалось, но это и не было основной задачей. Главное, что теперь у всех желающих появился инструмент для просмотра текстур в игре Q2. Кому этого будет недостаточно, и он захочет их отредактировать, предоставленной выше информации вполне для этого достаточно.
Это хороший наглядный пример, вполне вероятно, что такой же или подобный формат хранения графики используется и в других играх для PlayStation.
Теперь коротко о программе.
Программу я назвал Q2 Textures Viewer. С её помощью можно просматривать содержимое файла SNDVRAM.DAT, а точнее содержащиеся там текстуры.
 
Скачать Q2 Textures Viewer:
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: TTEMMA от 13 апреля 2016, 19:39
Было бы интересно взглянуть на исходники:)
Поздравляю с релизом!
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 13 апреля 2016, 20:07
Цитата: TTEMMA от 13 апреля 2016, 19:39Было бы интересно взглянуть на исходники :)
Поздравляю с релизом!
Там-то и смотреть не на что, большая часть кода это, загрузка файла, проверки и связь между элементами.
Сам основной код, грубо говоря, состоит из 20 строк.

int Start2= Chislo;
int x=0;
int y=0;
int Exit=0;

for (; ; ) {
int hex1 = traceL[Start2];

if (hex1>=128) {
int povtor=0xff - hex1 + 2;
for (int i2 = 0; i2 < povtor; i2++){
Image1->Canvas->Pixels[x][y]=RGB(0, traceL[Start2+1], traceL[Start2+1]);
x++;
if(x>=ShirinX){x=0;y++;}
Exit++;
}
Start2+=2;}
else  if (hex1<128) {
for (int i2 = 0; i2 <= hex1; i2++){ Start2++;
Image1->Canvas->Pixels[x][y]=RGB(0, traceL[Start2], traceL[Start2]);
x++;
if(x>=ShirinX){x=0;y++;}
Exit++;
}
Start2++;}
if(Exit>=ShirinX*ShirinY)break;
}
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: TTEMMA от 13 апреля 2016, 21:44
Решил помочь с разбором данного формата.
Оказывается, это не только контейнер для текстур, но и для звука. Буду разбираться глубже.
Что говорить о 4 байтах, начинающихся с 0x4, то это указатель на новый блок. В случае с файлам Q2DATA\LEVELS\QFMV\SNDVRAM.DAT, это указатель на блок со звуковыми эффектами.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 13 апреля 2016, 21:57
Цитата: TTEMMA от 13 апреля 2016, 21:44Решил помочь с разбором данного формата.
Оказывается, это не только контейнер для текстур, но и для звука. Буду разбираться глубже.
Что говорить о 4 байтах, начинающихся с 0x4, то это указатель на новый блок. В случае с файлам Q2DATA\LEVELS\QFMV\SNDVRAM.DAT, это указатель на блок со звуковыми эффектами.
Я предполагал, что в них есть звук (http://pscd.ru/forum/index.php?/topic/491-quake-ii-skrytye-urovni-psx/?p=5709).
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: PSXDev от 13 апреля 2016, 22:06
Будет круто, если ещё с палитрой разберётесь.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 14 апреля 2016, 08:33
Кстати, одно из моих предположений, что

Цитировать 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-36260100-1460450481.png)
Константа (постоянное значение), видимо для обозначения, что в этом файле хранятся текстуры (возможно ещё какие-то данные).
Первые 4 байта всегда = 0x0C000000.
Это не константа, а указатель на 0Ch.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 14 апреля 2016, 11:46
Нарыл кое-что по 3D моделям в QII.
Судя по всему модели хранятся в файле COMMON.DAT.
Для примера возьмём файл находящийся по адресу Q2DATA -> LEVELS -> QFRONT -> COMMON.DAT.
Начиная с $33F0 по $5DFB идёт первая 3D модель. Это модель логотипа Q II.
(http://pscd.ru/uploads/posts/2012-01/1325934313_quake-2.jpg)
 
Судя по всему сначала идёт скелет модели
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-19811700-1460623172.png)
 
Потом на него накладываются текстуры, а затем идёт поведение модели (наверное).
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-75686900-1460623142.png)
 
Кому интересно можете попробовать разобраться с системой хранения.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 14 апреля 2016, 16:23
Начал разбираться с подменой моделей. Вот результат:
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-36435700-1460640111.png)
 
Что это такое я не знаю :) , называется Chest.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: TTEMMA от 14 апреля 2016, 16:48
Тоже имеются маленькие продвижения:)
(http://s8.hostingkartinok.com/uploads/images/2016/04/bbe9feb1afafb681cd7fb57278b4f21b.png)
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 14 апреля 2016, 16:53
Цитата: TTEMMA от 14 апреля 2016, 16:48Тоже имеются маленькие продвижения :)
Круто, как завершишь, расскажешь всё подробно?
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: TTEMMA от 14 апреля 2016, 16:56
Цитата: SPOT от 14 апреля 2016, 16:53 

Цитата: TTEMMA от 14 апреля 2016, 16:48Тоже имеются маленькие продвижения :)
Круто, как завершишь, расскажешь всё подробно?
 
Да, конечно, надо только до конца разобраться с этой странной палитрой.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 14 апреля 2016, 16:57
Отчёт об продолжение эксперимента:
Chest судя по всему это кусок туловища (туши), по крайне мере наложив текстуры он стал на неё похож.
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-86045400-1460642089.png)
 
Думаю вы узнаете пистолет, который носит название Blaster G. Правда он отображается с артефактами.
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-65985600-1460642089.png)
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: TTEMMA от 14 апреля 2016, 17:20
Так, чтобы не забыть, с 0x0C идёт странных 4 байта, так вот:

Буду копать дальше.
В Quake II на PC в текстурах использовался Mipmaps, но не думаю, что на PS1 была такая фишка, видео чип не мог такого вытянуть.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 14 апреля 2016, 18:24
TTEMMA, на название файлов (текстур) есть где-то указатель?
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: TTEMMA от 14 апреля 2016, 20:04
Нет, они идут строго после блока с палитрой
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 14 апреля 2016, 20:43
Цитата: TTEMMA от 14 апреля 2016, 20:04Нет, они идут строго после блока с палитрой
Будет время, отпиши по палитре, пожалуйста.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: Diablo от 14 апреля 2016, 21:05
Гляжу у вас тут полным ходом идёт разбор ресурсов игры Квейк 2 ;). Повезёт так вы и левел едитор забабахаете)) Да и свою 3D модель было бы неплохо для игры сделать. Какого-то монстра своего вставить))
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 16 апреля 2016, 13:15
Скорее всего chars.lbm, Legal.lbm, HamLogo.lbm и frontend.lbm это названия исходных файлов. Формат *.lbm, судя по всему, был распространённым графическим форматом в то время.
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-47062800-1460801633.png)
Открыть его можно, например, с помощью Deluxe Paint ver.3.0. Интересным фактом является то, что в качестве примера в DP есть файл CELTIC.LBM. Эту картинку можно так же наблюдать и в демонстрационном роме 32X Sample Program - Celtic - PWM Test (http://pscd.ru/games/32x/0-932x/1188-32x-sample-program-celtic-pwm-test.html) для SEGA 32X.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 16 апреля 2016, 17:26
Вкратце на примере расскажу, как заменить одну 3D модель на другую.
Будем заменять модель Q2LOGO находящеюся в файле COMMON.DAT по адресу Q2DATA -> LEVELS -> QFRONT -> COMMON.DAT.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-11775300-1460816499.png)
Первая модель (данные модели) начинается с $33F0 и заканчивается примерно на $5DFC.
 
(http://pscd.ru/uploads/posts/2012-01/1325934313_quake-2.jpg)
Это модель логотипа QII, увидеть её можно в главном меню. Она там вертится.
 
Подменять будем на модель Chest находящеюся в файле Q2DATA -> LEVELS -> BASE0 -> COMMON.DAT. Адрес $1320 по $1B44.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-48427800-1460816499.png)
Копируем 28 байт начиная с $1334 по $1350 из модели Chest и вставляем в модель Q2LOGO в $3404.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-88928400-1460816500.png)
Далее копируем 2020 байт начиная с $1360 по $1B44 из модели Chest и вставляем в модель Q2LOGO в $3430.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-36435700-1460640111.png)
Всё, модель заменена.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 16 апреля 2016, 20:59
TTEMMA, Есть какой-то прогресс с разбором палитры?
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: TTEMMA от 17 апреля 2016, 17:37
Пока что нет :(
 
Кстати, в LBM использовалось сжатие - RLE, это же сжатие мы наблюдаем и в Quake II для PlayStation 1.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 17 апреля 2016, 21:20
TTEMMA, скинь адрес палитры Legal.lbm, я тоже попробую разобраться.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: PSXDev от 18 апреля 2016, 09:37
Цитата: TTEMMA от 17 апреля 2016, 17:37Кстати, в LBM использовалось сжатие - RLE, это же сжатие мы наблюдаем и в Quake II для PlayStation 1.
Я бы не сказал, что во второй кваке мы наблюдаем стандартный RLE. Это скорее, что-то очень сильно на него похожее.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: TTEMMA от 18 апреля 2016, 14:10
Выкладываю исходный код того, что уже было показано:
https://yadi.sk/d/pwPCZ5bWr5zoM
 
Работает, к сожалению, не со всеми файлами. Надо разбираться глубже с палитрой.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 18 апреля 2016, 15:30
Цитата: TTEMMA от 18 апреля 2016, 14:10Выкладываю исходный код того, что уже было показано:
 
 
Работает, к сожалению, не со всеми файлами. Надо разбираться глубже с палитрой.
Так и не смог понять из исходника как рассчитывается палитра (с какого места начинается) и какого она формата. Не можешь в паре словах описать?
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 18 апреля 2016, 18:39
Как я понимаю формат палитры TBGR / A1B5G5R5, а вот с какого место в файле начинается палитра картинки HamLogo.lbm, так и не понял.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 18 апреля 2016, 18:43
Всё отбой. Нашёл палитру для картинки HamLogo.lbm, она начинается с 0x8BE (Хотя точно сказать сложно т.к. работает и с 0x8С0).
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 20 апреля 2016, 16:35
Отыскал палитру для HamLogo.lbm какая используется непосредственно в самой игре. Эта палитра хранится в файле Q2DATA -> LEVELS -> QLOGOS2 -> COMMON.DAT по адресу $17078. 
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 21 апреля 2016, 14:34
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-03935700-1461238377.png)
Разобрался как высчитывается палитра в файле и ещё какие-то данные до неё. Судя по всему в файле SNDVRAM.DAT нет палитры для файлов типа *.opt. Позже поправлю документацию и дополню новой информацией.
 
В связи с этим обновил программу Q2 Texture Viever до версии 1.1.
 
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-29504900-1461238377.png)
В программу были внесены следующие изменения:
- Добавлено отображение разрешения (ширина и высота) выводимого изображения
- Вывод названия файлов в списке
- Отображение палитры для файлов расширения *.lbm
- Возможность отключить вывод палитры для файлов *.lbm
- Ещё кое-что по мелочи
 
Скачать Q2 Textures Viewer v1.1:
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 21 апреля 2016, 17:00
Добавил информацию в Устройство файла SNDVRAM.DAT (http://pscd.ru/forum/index.php?/topic/492-quake-ii-tekstury-grafika-psx/?p=5731)
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: PSXDev от 22 апреля 2016, 16:45
SPOT, большое тебе спасибо за проделанную работу. Выходит, ты сам того не подозревая написал полноценную инструкцию о том как разжимать графику, в конкретном случае для PSX. Очень подробно и детально всё описано до мелочей, со скриншотами. Так, что бы было понятно и новичку.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 29 апреля 2016, 16:35
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-87877900-1461936576.jpg)
 
Пытаюсь разобраться с 3D моделями. Вот собственно говоря результат. Вообще не понятно, что это за круг из точек вокруг лого QII. Так и должно быть или это что-то не то, ещё предстоит разобраться.
Что касается хранения точек, то их принцип схож с принципом хранения точек в TMD формате.
Скрин сделал с монитора, так как программа E3D не работает на 64 разрядной винде. Пришлось лезть на дрова, а там печаль-беда :( .
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: PSXDev от 29 апреля 2016, 16:51
Вот это прогресс))
Даёшь редактор уровней для Quake 2 для PSX.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: edgbla от 29 апреля 2016, 17:14
Круг или сфера? Нормали наверное.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 29 апреля 2016, 18:13
Цитата: edgbla от 29 апреля 2016, 17:14Круг или сфера? Нормали наверное.
Сфера.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 30 апреля 2016, 11:13
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-63374600-1462003776.png)
Вот попытался перенести точки из 3D модели игры Q2 в формат *.MS3D. Это формат MilkShape. Получилось так себе, так ещё и "модель" перевёрнута.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 30 апреля 2016, 16:37
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-83414400-1462023282.png)
Понял каким по счёту идёт «мусор» и убрал его. В MilkShape 3D модель выглядит не очень, в E3D вроде бы всё (точки) отображается правильно.
(http://pscd.ru/forum/uploads/monthly_04_2016/post-95-0-72648000-1462023283.png)
Немного информации по точкам (вершинам). Вначале идёт точка модели X, Y, Z. Каждая координата занимает по 2 байта. Там ещё кое-какие нюансы по расчёту, об этом расскажу, как-нибудь потом. Для тех, кто знает. Рассчитывается так же, как и точки в *.TMD.
После точки идёт «точка-мусор». Она конечно зачем-то нужна, но я ещё не понял зачем. В общем оно чередуется, точка из видимой части модели с точкой-мусором.
 
P.S. На картинке зелёным цветом обозначена "точка-мусор".
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 04 мая 2016, 15:53
(http://pscd.ru/forum/uploads/monthly_05_2016/post-95-0-66737300-1462366330.png)
Продолжаю работу по конвертации модели из Q2 в формат TMD.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 04 мая 2016, 19:27
(http://pscd.ru/forum/uploads/monthly_05_2016/post-95-0-13354600-1462378896.png)
Закончил перенос "рёбер" (соединение точек между собой) в TMD формат. Осталось ещё кое в чём разобраться. Но в целом большинство по модели ясно.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 04 мая 2016, 20:52
(http://pscd.ru/forum/uploads/monthly_05_2016/post-95-0-59416300-1462384277.png)
Нарисовал и вставил куб (Box) вместо лого QII.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: PSXDev от 04 мая 2016, 21:13
Даже и не верится, что такое возможно.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: Alon от 05 мая 2016, 10:32
Цитата: SPOT от 04 мая 2016, 19:27 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-95-0-13354600-1462378896.png)
Закончил перенос "рёбер" (соединение точек между собой) в TMD формат. Осталось ещё кое в чём разобраться. Но в целом большинство по модели ясно.
 
Круто, на моей памяти таким никто не занимался. В смысле конвертацией 3D моделей в ЗЫЧе туда и обратно. Только что-то подобное пытался сделать DenGame в V8, но вроде бы у него так довести до конца  не получилось.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 05 мая 2016, 16:08
(http://pscd.ru/forum/uploads/monthly_05_2016/post-95-0-76127000-1462453521.png)
(http://pscd.ru/forum/uploads/monthly_05_2016/post-95-0-92187900-1462453522.png)
В меню немало 3D моделей, которые я ранее не встречал в нём. Может их хотели использовать, а потом попросту забили.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-95-0-78189100-1462453520.png)
Кругом обман :)  Мы то стреляем из какого-то огрызка)).
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 07 мая 2016, 12:19
Обнаружил кое-что любопытное. Игра Blade (http://pscd.ru/games_rus/psx_rus/b_psx_rus/9268-blade-rgr.html) для PSX по структуре почти идентична с Quake 2. У игр один разработчик Hammerhead Ltd, и созданы они с разницей в год.
В игре Blade разработчикам было так лень что-либо менять, что папка с основными файлами называется также как во второй кваке - Q2DATA. Об этом даже можно писать в "Знаете ли вы? (http://pscd.ru/know/)"
(http://pscd.ru/forum/uploads/monthly_05_2016/post-95-0-81982800-1462612661.png)
С помощью программы Q2 Textures Viewer (http://pscd.ru/forum/index.php?/topic/492-quake-ii-tekstury-grafika-psx/?p=5749) можно без труда просмотреть текстуры в игре Блейд. Хранятся они в файлах с таким же названием как и в Q2 - SNDVRAM.DAT.
(http://pscd.ru/forum/uploads/monthly_05_2016/post-95-0-90562200-1462612659.png)
Так же модели почти идентичны и отличаются всего на 4 байта, во всяком случае их основная часть.
(http://pscd.ru/forum/uploads/monthly_05_2016/post-95-0-80520100-1462612660.png)
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 07 мая 2016, 18:42
Описал формат хранения 3D моделей в игре Quake 2 для PSX.
Устройство 3D модели (http://pscd.ru/forum/index.php?/topic/492-quake-ii-tekstury-grafika-psx/?p=5733)
Хранение вершин и нормалей в 3D модели (http://pscd.ru/forum/index.php?/topic/492-quake-ii-tekstury-grafika-psx/?p=5734)
Хранение полигонов и информации об объектах в 3D модели (http://pscd.ru/forum/index.php?/topic/492-quake-ii-tekstury-grafika-psx/?p=5735)
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 10 мая 2016, 12:28
Еще в одной игре от Hammerhead Ltd используется такой же формат хранения графики (текстур) и 3D моделей. Правда 3D модели ближе к Blade.
Собственно говоря эта игра Jinx (http://pscd.ru/games_rus/psx_rus/j_psx_rus/9124-jinx-vector.html).
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-95-0-87697200-1462871976.png)
Для просмотра графики можно использовать всё тот же Q2 Texture Viever (http://pscd.ru/forum/index.php?/topic/492-quake-ii-tekstury-grafika-psx/?p=5796).
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-95-0-87031900-1462871975.png)
Пример 3D модели из игры Jinx.
 
Нарыл ещё один интересный момент. В игре Shadow Master (1997 года), разработчиком, которой является Hammerhead Ltd. Это, судя по всему,  их первая игра для PSX.
(http://pscd.ru/forum/uploads/monthly_05_2016/post-95-0-08998700-1462871977.png)
В этой игре графика (картинки) лежат в формате *.LBM. Просмотреть и отредактировать его можно с помощью Deluxe Paint ver.3.0. Подробнее тут (http://pscd.ru/forum/index.php?/topic/492-quake-ii-tekstury-grafika-psx/?p=5775). Видимо такой же формат исходных файлов графики и в других трёх играх: Q2, Blade и Jinx.
 
(http://pscd.ru/forum/uploads/monthly_05_2016/post-95-0-21383900-1462873319.png)
Так же в SM есть файлы SNDVRAM.DAT. Которые можно просмотреть с помощью Q2 Texture Viever. Но названия файлов отображаются не корректно. Видимо есть какое-то различия в файлах.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 11 мая 2016, 16:06
(http://pscd.ru/forum/uploads/monthly_05_2016/post-95-0-83915700-1462971859.png)
Сделал программу HammerHead 3D To TMD для «просмотра» 3D моделей из игр Quake II, Blade и Jinx. Если быть более точным, то это не просмотрщик, а конвертер из формата 3D моделей от Hammerhead Ltd в TMD. Позже данные файлы можно довольно удобно просмотреть с помощью MilkShape 3D 1.8.4.
(http://pscd.ru/forum/uploads/monthly_05_2016/post-95-0-04241100-1462971860.png)
Не совсем уверен, что TMD файл корректный. Но для просмотра вполне сгодится.
Возможно, некоторые модели из Jinx будут конвертироваться с некоторыми ошибками.
В основном всё работает и таким способом можно быстро просмотреть имеющиеся 3D модели в игре.
 
Скачать HammerHead 3D To TMD:
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: Alon от 13 мая 2016, 13:54
Всегда было интересно посмотреть как устроены 3Д модели в играх на Соньку. Большое спасибо за проделанную работу, кое-что прояснилось.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: kvaker от 24 мая 2016, 09:01
Куда пропал автор? Жутко интересная тема, всегда хотел знать что да как там. Так подробно в рунете еще никто это не освещал, в общем в ожидании продолжения.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 24 мая 2016, 10:08
Цитата: kvaker от 24 мая 2016, 09:01Куда пропал автор? Жутко интересная тема, всегда хотел знать что да как там. Так подробно в рунете еще никто это не освещал, в общем в ожидании продолжения.
Никуда не пропал. Всё что хотел поведал, может ещё когда-какой формат графы разберу и опишу. Да и времени свободного не так много, как хотелось бы.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: ViT от 01 октября 2018, 09:40
SPOT (http://pscd.ru/forum/index.php?/user/95-spot/) спасибо за инфу о текстурах, правда с запаковкой пришлось повозиться. Только ты их все открываешь как 8бит, а они почти все 4бита, кроме "логоподобных" файлов.
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: PSXDev от 06 февраля 2020, 14:48
Обнаружил такие интересные твиты:
 
(http://pscd.ru/forum/uploads/monthly_02_2020/post-70-0-49749400-1580993028.png)
Quake II PSX development material from 1998! A few model sources and an actual editor. I've managed to get it running and loading id BSP files again.
 
(http://pscd.ru/forum/uploads/monthly_02_2020/post-70-0-38406000-1580993036.jpg)
Reverse engineered Quake II PSX's retail formats in order to contrast them to the formats used by the 1998 editor. The model format is mostly intact, but map data has undergone a major overhaul. Most changes were made in the name of reducing polygon data duplication.
 
Ссылки:
Ссылка 1 (https://twitter.com/DickWhitehouse/status/1122581313704185857)
Ссылка 2 (https://twitter.com/DickWhitehouse/status/1122911945927954437)
Ссылка 3 (https://twitter.com/DickWhitehouse/status/1122612681599377408)
Ссылка 4 (https://twitter.com/DickWhitehouse/status/1122911948150935558)
 
Сейчас попытаюсь всё объяснить. Точнее так как я это всё понял.
Это твитер какого-то разраба, возможно он был когда-то связан с разработкой Q2.
 
На первом скрине мы видим программу с надписью: mapples.mpj - (C) HammerHead Ltd. 1998
Не ясно mapples.mpj это название файла или программы.
В данной программе открыта одна из карт без текстур (отображение текстур отключено) из игры Quake 2.
 
На втором скрине мы уже можем наблюдать карту отрытую в каком-то другом редакторе.
Надпись: ZONE0.DAT
 

Цитировать 
I'll push a Noesis build with Quake II PSX support sometime soon. The PSX models are skeletally animated at runtime as well. (heavier on the per-vertex ops, but a lot lighter on the memory requirements)
Так же в одном из коментов автор говорит что добавит поддержку Q2 в какую-то прогу (Noesis ).
 
P.S.

Цитировать 
Noesis - это инструмент для предварительного просмотра и конвертации между сотнями форматов моделей, изображений и анимации. Он использует надежную плагиновую систему с поддержкой собственных модулей расширения и скриптов Python. API-интерфейс плагина / скрипта содержит сотни функций и интерфейсов, которые помогают в разработке новых форматов, инструментов и средств визуализации. Noesis также предлагает функции обработки, преобразования и визуализации для различных типов объемных данных, включая медицинские визуальные форматы, такие как Analyze 7.5, NifTI-1 и DICOM.
 
Программа которую мы наблюдаем на втором скрене это Noesis .
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: Raizel от 10 февраля 2020, 11:53
Здрасьте!

mapples.mpj - название открытого в программе файла сцены(проекта).
 
Как я понял, автор переработал модели(Reverse engineered) и уменьшил количество дублируемых полигонов.
 
Ох уж этот Gourand-шейдинг...
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: SPOT от 10 февраля 2020, 16:16
У меня несколько хороших новостей для вас.
 
В связи с постом чуть выше, я решил поковырять Q2 ещё раз. На этот раз я разобрал формат хранения 3D уровней в этой игре (не весь конечно, а только то что связано с 3D моделями). Забегая вперёд скажу сразу что точно такое же устройство уровней ещё в двух играх для PSX - это уже известные нам игры Blade и Jinx.
 
Подробнее в статье: Устройство файла ZONE0.DAT (http://pscd.ru/forum/index.php?/topic/492-quake-ii-tekstury-grafika-psx/?p=5736#entry5736)
 
Так же я сделал программу для выдирания 3D уровней из игры. Программа подходит для извлечения уровней из следующих игр PSX: Quake II, Blade и Jinx.
 
HammerHead 3D Map To PLY
 
(http://pscd.ru/forum/uploads/monthly_02_2020/post-95-0-13749000-1581344080.png)
 
Программа предназначина для извлечения из файлов игры 3D моделей из каких состоит уровень.
 
Всё что нужно это нажать на кнопку Open Map и выбрать файл с уровнями. Напомню что 3D уровни храняться в файлах типа: ZONE0.DAT, ZONE1.DAT, ZONE2.DAT, ZONE3.DAT.
После этого все 3D модели из которых состоит уровень будут извлечены. Хранится они будут в файлах типа (формата) *.ply
 
Затем каждую 3D модель можно будет просмотреть по одтельности, либо загрузить (импортировать) все вместе в blender или любой другой 3D редактор поддерживающей такую функцию.
 
(http://pscd.ru/forum/uploads/monthly_02_2020/post-95-0-83935600-1581344065.png)
(http://pscd.ru/forum/uploads/monthly_02_2020/post-95-0-39592000-1581344074.png)
 
Скачать программу HammerHead 3D Map To PLY:
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: Alon от 10 февраля 2020, 17:06
Круто! Не ожидал что такое возможно. Правда жаль что без текстур((
Название: Re: Quake II Текстуры (Графика) [PSX]
Отправлено: PSXDev от 12 февраля 2020, 18:44
SPOT, отличные новости! Рад что мой пост послужил толчком к этому ;).
Выходит что почти все стены, полы и некоторые другие объекты это плоскости.
Забыл выразить благодарность за проделанную работу. Надеюсь ты продолжишь радовать нас новыми интересностями про устройство PSX игр.