Автор Тема: Вопрос. Алгоритм сжатия vram в PSX.  (Прочитано 5797 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн q0099

  • Пользователь
  • Сообщений: 8
    • Просмотр профиля
Здравствуйте.
На эмуляторе ePSXe сделал с помощю видеоплагина P.E.Op.S. 1.18b скриншот vram. Оказалось что там почти вся графика сжата. Подскажите что за алгоритм использован при сжатии и где есть описание алгоритма.

Скриншот vram

Дополнительный вопрос. В плагинах Pete's OpenGL2/D3D DX7 vram тоже хранится в сжатом виде? А если нет, то можно ли его просмотреть и с помощью каких программ это делается?

(если тема уже существует, дайте ссылку или ключевые слова для поиска)

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: Вопрос. Алгоритм сжатия vram в PSX.
« Ответ #1 : 10 Март 2009, 09:44:41 »
Сжатия тут никакого нет. Просто не вся графика находится там в том формате, в котором ты смотришь. А если бы было сжатие - ты бы графики не увидел вообще. Да и во VRAM сжатия не может быть в принципе, ибо оттуда графика берётся уже на вывод. Хотя, точных принципов работы с видеопамятью на PSX я не знаю. На GBA вон, например, что угодно можно творить с видеопамятью без всяких DMA, только писать надо по чётным адресам и парами байт.
А хранится VRAM везде абсолютно одинаково. Более того, плагины к её хранению отношения не имеют совершенно - это лишь часть памяти приставки.

Оффлайн edgbla

  • Пользователь
  • Сообщений: 503
    • Просмотр профиля
Re: Вопрос. Алгоритм сжатия vram в PSX.
« Ответ #2 : 10 Март 2009, 10:38:29 »
---------------------------------------------------------------------------
Texture
---------------------------------------------------------------------------
A texture is an image put on a polygon or sprite. It is necessary to
prepare the data beforehand in the frame buffer. This image is called a
texture pattern. The texture pattern is located on a texture page which
has a standard size and is located somewhere in the frame buffer, see
below. The data of a texture can be stored in 3 different modes:

* 15bitDirect mode.

bit  |0f|0e 0d 0c 0b 0a|09 08 07 06 05|04 03 02 01 00|
desc.|S |Blue          |Green         |Red           |

This means each color has a value of 0-31. The MSB of a pixel (S)is used
to specify it the pixel is semi transparent or not. More on that later.

* 8bit CLUT mode,
 Each pixel is defined by 8bits and the value of the pixel is converted to
 a 15bit color using the CLUT(color lookup table) much like standard vga
 pictures. So in effect you have 256 colors which are in 15bit precision.

 Bit: |0F-08|07-00|
 desc:|I1   |I0   |

 I0 is the index to the CLUT for the left pixel, I1 for the right.

* 4bitCLUT mode,
 Same as above except that only 16 colors can be used. Data is arranged as
 follows:

 Bit   |F-C|B-8|7-4|3-0|
 desc. |I3 |I2 |I1 |I0 |
 0 is drawn to the left

взято из gpu.txt

Оффлайн q0099

  • Пользователь
  • Сообщений: 8
    • Просмотр профиля
Re: Вопрос. Алгоритм сжатия vram в PSX.
« Ответ #3 : 10 Март 2009, 11:56:25 »
HoRRoR
Ясно. Меня сбило с толку то, что часть графики нормально отображается.

edgbla
Пожалуйста, дайте ссылку на этот gpu.txt

Оффлайн edgbla

  • Пользователь
  • Сообщений: 503
    • Просмотр профиля
Re: Вопрос. Алгоритм сжатия vram в PSX.
« Ответ #4 : 10 Март 2009, 12:05:34 »
Ну отображается норм только фрейм буфер в 24bit Direct:
---------------------------------------------------------------------------
The Frame Buffer.
---------------------------------------------------------------------------
15bitDirect display.

pixel|                                               |
bit  |0f|0e 0d 0c 0b 0a|09 08 07 06 05|04 03 02 01 00|
desc.|M |Blue          |Green         |Red           |

This means each color has a value of 0-31. The MSB of a pixel (M) is used
to mask the pixel.

24bit Direct Display.

The GPU can also be set to 24bit mode, in which case 3 bytes form one
pixel, 1 byte for each color. Data in this mode is arranged as follows:

pixel|0      |1      |2      |
Bit  |F-8|7-0|F-8|7-0|F-8|7-0|
desc.|G0 |R0 |R1 |B0 |B1 |G1 |

Thus 2 display pixels are encoded in 3 frame buffer pixels. They are
displayed as follows: [R0,G0,B0] [R1,G1,B1]

http://psx.rules.org/gpu.txt

Добавлено позже:
Не совсем ясно что тебе нужно конечно, просто раз текстуры индексные,
нужно знать где расположены таблицы цветов,
из скриншота vram этого явно не узнать ;)

Оффлайн q0099

  • Пользователь
  • Сообщений: 8
    • Просмотр профиля
Re: Вопрос. Алгоритм сжатия vram в PSX.
« Ответ #5 : 10 Март 2009, 12:12:19 »
edgbla
Большое, большое спасибо за ссылку - сижу, читаю.

Таблицы цветов... Я ещё не очень освоился с терминологией и могу ошибаться, но судя по всему они под 24 битными изображениями. Остаётся только понять по какому принципу они расположены.
« Последнее редактирование: 10 Март 2009, 12:16:44 от q0099 »

Оффлайн edgbla

  • Пользователь
  • Сообщений: 503
    • Просмотр профиля
Re: Вопрос. Алгоритм сжатия vram в PSX.
« Ответ #6 : 10 Март 2009, 12:16:12 »
%) ты бы цель написал, если выдрать текстуры надо, то проще прямо с диска игры какой-нить прогой типа timgrab
и ей подобными, ну это уже скорее к HoRRoR.

Таблицы расположены по принципу - как Бог на душу положит :-D
« Последнее редактирование: 10 Март 2009, 12:21:55 от edgbla »

Оффлайн q0099

  • Пользователь
  • Сообщений: 8
    • Просмотр профиля
Re: Вопрос. Алгоритм сжатия vram в PSX.
« Ответ #7 : 10 Март 2009, 12:56:41 »
edgbla
Не, я имею в виду именно этот случай. В нижнем левом углу - блок пикселей.

Зачем всё это?
Сначала было желание кое-какие спрайты вынуть, из другой игры, правда. Потом, когда не получилось, появилось желание узнать "а почему же получается?", "а как сделать так чтобы получилось?"

Пользовался программой PSX Multi Converter Ver3.23.
А есть ссылка на описание параметров запуска Timgrab.exe? На официальном сайте разработчика по Timgrab никаких упоминаний не нашёл, только две "новости" от 30 и 31 октября 2002.
« Последнее редактирование: 10 Март 2009, 13:02:08 от q0099 »

Оффлайн edgbla

  • Пользователь
  • Сообщений: 503
    • Просмотр профиля
Re: Вопрос. Алгоритм сжатия vram в PSX.
« Ответ #8 : 10 Март 2009, 13:07:29 »
хех, ну я вижу что палитры внизу, ну и что? перебирать все?
у Timgrab.exe один параметр это файл в котором искать тим файлы, очевидно же.

А вообще жди  HoRRoR, он скажет пиши выдиралку сам :-D
« Последнее редактирование: 10 Март 2009, 13:10:08 от edgbla »

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: Вопрос. Алгоритм сжатия vram в PSX.
« Ответ #9 : 10 Март 2009, 15:11:06 »
А вообще жди  HoRRoR, он скажет пиши выдиралку сам :-D
Я скажу - используй TimViewer. PSicture пропускает картинки, PsxMC я бы вообще только для видео/аудио советовал.

А насчёт "таблиц цветов" - есть прекрасное всем понятное слово "Палитра", именно так переводится с английского Color Table.

И зачем пугать товарища ссылками на спецификации, если на деле то всё на порядок проще?

Оффлайн edgbla

  • Пользователь
  • Сообщений: 503
    • Просмотр профиля
Re: Вопрос. Алгоритм сжатия vram в PSX.
« Ответ #10 : 10 Март 2009, 16:24:31 »
ыыы, чего проще-то? я ответил на его вопросы, дал ему нужную информацию о представлении данных в видеопамяти psx,
к чему какие-то левые выпады на меня?
И вообще таблица цветов самое настоящее название, CLUT(color lookup table).

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: Вопрос. Алгоритм сжатия vram в PSX.
« Ответ #11 : 10 Март 2009, 22:58:51 »
Товарищ похож на программиста или хакера? Ему твоя информация как китайская грамота. А всего-то хочет выдрать графику. Это как объяснять принципы фотосинтеза на вопрос о цвете листьев, вместо ответа "зелёные".

Оффлайн edgbla

  • Пользователь
  • Сообщений: 503
    • Просмотр профиля
Re: Вопрос. Алгоритм сжатия vram в PSX.
« Ответ #12 : 11 Март 2009, 00:52:33 »
Ну вот назвал парня дауном  :lol:
Он ж сам сказал что интересно ему. ;)
Ждём пока хозяин закроет темку. гы, ну или злой админ.

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: Вопрос. Алгоритм сжатия vram в PSX.
« Ответ #13 : 11 Март 2009, 02:26:30 »
Кроме нас, "психов", существуют нормальные люди, не сведущие в программировании, области интересов которых несколько иные. Называть их даунами, хм, глупо.

Оффлайн q0099

  • Пользователь
  • Сообщений: 8
    • Просмотр профиля
Re: Вопрос. Алгоритм сжатия vram в PSX.
« Ответ #14 : 11 Март 2009, 16:14:01 »
В общем всё, всем спасибо за предоставленные информацию и разъяснения. Было интересно немного узнать о том как работает PSX.

В итоге, из того что узнал, могу сделать вывод что для вынимания графики по типу "хочу этого персонажа" годится именно использование vram - нету проблем со сжатием и прочими оптимизационными выкрутасами программистов. Минус - придётся караулить загрузку спрайтов в память и потом приводить их в нормальное состояние (конвертировать и перекрашивать). Если такие вещи буду делать в промышленных масштабах - напишу утилиту и обязательно выложу сюда.
« Последнее редактирование: 11 Март 2009, 16:19:00 от q0099 »

Оффлайн edgbla

  • Пользователь
  • Сообщений: 503
    • Просмотр профиля
Re: Вопрос. Алгоритм сжатия vram в PSX.
« Ответ #15 : 11 Март 2009, 17:32:23 »
Ну дерзай, только тут не утилита пожалуй нужна,
в просто добавить в peopsSoft код дампа нужной текстурной страницы в какой-нить bmp,
ессно чтобы нормально сдампить надо запоминать соответственно палитры,
лучше вообще дампить при отрисовке, чтобы были все данные.

Оффлайн BoreS

  • Пользователь
  • Сообщений: 60
  • Пол: Мужской
    • ВКонтакте
    • Просмотр профиля
Re: Вопрос. Алгоритм сжатия vram в PSX.
« Ответ #16 : 13 Март 2009, 20:11:56 »
одну утилиту на все игры ты не напишешь, для каждой игры (почти) придётся писать свою утилитку :) всё зависит от разрабов, они между собой не советовались, когда делали игры и пихали графику в них.

Оффлайн q0099

  • Пользователь
  • Сообщений: 8
    • Просмотр профиля
Re: Вопрос. Алгоритм сжатия vram в PSX.
« Ответ #17 : 13 Март 2009, 21:40:13 »
BoreS
В том то и дело что графика вынимается не из данных игры, где она может храниться в собственном формате, да ещё и не один раз сжатая, а из vram приставки (или эмулятора) - там графика находится в стандартном виде (поправьте меня если я что-то не так понял).
Правда, могут быть заморочки с вылавливанием момента подгрузки в память нужной графики, с перекрашиванием, с текстурами для трёхмерных моделей, да и программисты могут снова соригинальничать, но в целом этот метод надёжнее.

edgbla
Хм. А Пит предоставил исходники от пеопс?
« Последнее редактирование: 14 Март 2009, 02:09:05 от q0099 »

Оффлайн edgbla

  • Пользователь
  • Сообщений: 503
    • Просмотр профиля
Re: Вопрос. Алгоритм сжатия vram в PSX.
« Ответ #18 : 14 Март 2009, 08:31:07 »
Хех, ну заморочек во время подгрузки нету, подгрузилась текстура по дма и всего делов,
анимацию если что так же по кадрам, больше ничего там особенного нету,
повторю ещё раз, большими буквами чтоль писать...
тебе надо дампить текстуры во время их непосредственного использования
при отрисовке полигона/спрайта, т.к. в этот момент известно положение clut.

Насчёт peopsSoft, ну ты что-то вообще лентяй, гугл бы тут очень помог:
http://www.google.ru/search?hl=ru&q=peops+soft+source+download&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr=&aq=f&oq=
но если вдруг не осилишь то вот:
http://sourceforge.net/projects/peops/