Как улучшить графику на псп

Обновлено: 07.07.2024

Я продолжаю тему программного эмулятора для PlayStation 1, PlayStation 2 и PlayStation Portable — Omega Red. Более подробно:

  • Видео гид по эмулятору Omega Red
  • Поддержка геймпада для эмулятора Omega Red
  • Новый PS1 графический рендерер для эмулятора Omega Red
  • Omega Red + PS1 эмулятор = Кодзима гений
  • PS2/PSP эмулятор + game play streaming (YouTube, Facebook, Twitch) = новая версия Omega Red
  • PS2/PSP эмулятор + Google Drive + YouTube = «безумие» продолжается
  • Как я подружил PlayStation 2 и PlayStation Portable (спойлер — объединил в один эмулятор)
  • Красный Омега PS2 эмулятор

Особенностью программной архитектуры эмуляторов является рендеринг полигонов игровых сцен через нативный графический API — как результат, эмуляторы имеют в своём составе графический «движок» различной степени функционала. И один из функционалов — это рендеринг в разрешение окна экрана. В эмуляторе OmegaRed рендеринг происходит в отдельную видео текстуру, и размер этой текстуры определяет размер виртуальной камеры рендерера.

Установка текущего разрешения производится из панели настройки конфигурации:

image

Сравнить качество рендеринга при разрешениях 720р / 2160р можно на следующих видео:

Как улучшить графику на псп

Итак,для тех,кто не знает,на ppsspp можно ставить свои шейдеры для улучшения графики.
Как это делается:
На андроиде: Предоставленный ниже архив нужно распаковать в папку SHADERS которая находится в главной папке PSP,если же папки SHADERS нет,ее нужно создать самостоятельно и кинуть все шейдеры из архива в созданную папку.
P.S многие предоставленные шейдеры на слабых аппартах не покажут себя в полной мере

На пк:Распаковываем скачанный архив директорию assets/shaders
Все.Профит

Все шейдеры включается в меню настроек ,для особо одаренных называется "постобработка/шейдер"

От себя добавлю ,что шейдеры очень хорошо улучшают картинку,особенно это заметно при шейдере ULTRAHD,
ниже предоставленны скриншоты.
Слева - шейдер,справа-без него

Отображение трёхмерной графики на PSP

Пару месяцев назад я вновь достал из ящика запылившуюся PSP и решил портировать туда мой ранее уже показанный движок. С программной отрисовкой проблем не возникло – всё и так работает. А вот с использованием GU всё оказалось не так просто. В данной статье я покажу на примере, как можно написать для PSP простое трёхмерное приложение, использующее GU.

Заранее предупреждаю, что руководств по программированию для PSP довольно мало, и поэтому какие-то мои выводы могут оказаться неверными. Но, к делу.

Главная функция программы для PSP, если кто не знает, оформляется примерно вот так:


Инициализация GU выполняется следующим образом:

Сначала мы запрашиваем указатели на три буфера – экранный, внеэкранный и буфер глубины (Z-буфер). Буферы выравниваются по 512 пикселей в строке (хотя у PSP строка 480 пикселей). Также требуется учесть формат цвета пикселя. В данном примере использован формат GU_PSM_8888 — по 8 бит на R,G,B и Alpha-компоненты цвета пикселя. Для Z-буффера использован формат GU_PSM_4444 просто потому что это 16 бит — Z-буфер у PSP 16 битный.


Функция запроса указателей на буферы определяется как


Это не мои функции – я их взял из какой-то программы давным-давно и лишь слегка изменил. Память распределяется в области видеопамяти. Текстуры также следует по возможности размещать там же, запрашивая указатель через getStaticVramTexture, иначе быстродействие резко упадёт. Разумеется, никакой динамической памяти при таких запросах не выделяется, а просто распределяется часть заданного адресного пространства PSP под экран и текстуры. Насколько я помню, видеопамяти у PSP всего 2 мегабайта — это очень мало для хранения множества текстур.

Программирование GU у PSP похоже на программирование для OpenGL с одним отличием — выполнение команд требует их размещения в дисплейном списке, причём память для этого списка должна быть заранее выделена и при этом выровнена:
static unsigned char __attribute__((aligned(16))) DisplayList[262144];
Команды, относящиеся к преобразованию координат не требуют дисплейного списка и могут выполняться в любом месте программы.

Инициализировать GU можно, например, так:


После завершения работы с GU следует вызвать sceGuTerm().

После загрузки текстуры размера (WidthImage; HeightImage) любым удобным способом (указатель Data на данные текстуры – и лучше его получать в области видеопамяти), мы можем её вывести на экран.


Как вывести полигон? Для рисования геометрии GU у PSP просит поместить все точки в массив, указатель на который нужно предварительно получить командой sceGuGetMemory, передав ей размер запрашиваемого блока памяти в байтах. Дальше по этому указателю вы должны записать массив точек и попросить PSP их вывести, например, командой sceGumDrawArray с нужными параметрами. Но каков формат этих точек? У PSP данные точек располагаются в определённом порядке и размер массива, описывающего одну точку должен быть кратен 32 байтам: Вес вершины, текстурные координаты, цвет точки, нормаль к точке, координата точки. Именно в таком порядке. Чтобы не заморачиваться с форматом, я определил набор структур и функций для работы с ними:


Тогда задать геометрию (в данном случае — квадрат) можно, например, так:


А вывести его, например, так:


Для вывода я указал функции sceGumDrawArray, что именно я рисую и каков формат точки ( GU_COLOR_8888|GU_VERTEX_32BITF|GU_TRANSFORM_3D|GU_NORMAL_32BITF|GU_TEXTURE_32BITF — точка состоит из цвета, координат, нормали, текстурных координат и требует перемножения координат на соответствующие матрицы перед рисованием). Рисование возможно только треугольниками. Но это ещё не всё…

Вроде бы всё работает, но работает только, если все точки находятся перед глазами и видимы. Стоит хотя бы одной точке уйти в какую-то туманную даль, как GU отказывается рисовать весь многоугольник. Как я понимаю, GU у PSP требует, чтобы относительно четырёх плоскостей отсечения (левая, правая, верхняя и нижняя (а передняя получится автоматически)) точка лежала внутри этого объёма, иначе GU не согласен её выводить. Проблема. Но в играх-то 3D-графика присутствует и таких артефактов не наблюдается! Давайте посмотрим, как решили эту проблему в PSP Quake 1, благо исходники доступны для анализа.

Что же мы видим из анализа исходников? А по сути вот что:


То есть, в Quake 1 перед выводом просто переносят все точки внутрь объёма, ограничивающего взгляд, либо выбрасывают их вовсе (если вся фигура не видна). Как же это сделать? Нужно просто считать три матрицы — GU_PROJECTION, GU_MODEL, GU_VIEW. Перемножить их и получить итоговую матрицу преобразования координат. Из этой матрицы можно вытащить все нужные ограничивающие вид плоскости (4 компоненты полученного вектора задают плоскость с уравнением ax+by+cz+w=0). (a,b,c) — вектор нормали, а w=a*x0+b*y0+c*z0 — характеризует некую точку (x0,y0,z0) плоскости. Сами координаты точки нам не нужны — достаточно знать w.

Отсечение выполняется следующим образом (для четырёх вышеуказанных плоскостей по-очереди в цикле):


Но для такого фокуса нам потребуются следующие функции (списанные из Quake 1):


И вот только после выполнения такого отсечения у вас, наконец-таки, корректно заработает вывод трёхмерной графики на PSP с помощью GU. Можете создавать игру! :)


Кстати, можно также использовать для скалярного произведения векторов векторный процессор PSP. Например, вот функция, определяющая требуется ли вообще отсечение (выдранная по кусочкам из того же Quake 1 для PSP):


Тут всё просто — поместили вектора плоскостей и координаты точки в регистры и попросили VFPU выполнить скалярное произведение.

JoySens 1.3 - Настройка чувствительности аналогового джостика

JoySens 1.3 - Настройка чувствительности аналогового джостика

Описание: Этот плагин позволяет настроить чувствительность аналогового джостика.

Custom Theme Converter

Custom Theme Converter

Что бы кто ни говорил, но Сони кое-что берет у пиратов. Перед вами программа для создания собственных тем для прошивок 3.70 и выше, в том числе оффициальных. Созданные темы кидаем в PSP/THEME и включаем через Настройках темы. Для работы программы на компьютере необходим Microsoft NET Framework 3.0. Сам не проверял. PS: Есть еще FAQ по программе на японском, но я его не залил, так как знающих язык самураев очень мало.

Windows Vista PSP

Windows Vista PSP

Наз вание гово рит само за себя.

CiSO Converter v11.00 GUI

CiSO Converter v11.00 GUI - формат видео для psp, игры psp на русском, скачать бесплатно игры для psp, прошивка psp 5.50.

CISO Converter Plus! - программа, которая основана на методах BOOSTERа по компрессии/декомпрессии CSO. С ее помощью можно сжать ISO-образ и сохранить несколько свободных мегабайт на карте памяти. В новой версии программы компрессия образов в CSO проходит намного быстрее ( так для владельцев процессоров DualCore время компрессии сократилось вдвое), добавлено несколько новых полезных функций. Уменьшает размер ISO файла на 10-30%. Будет очень полезна для тех у кого маленькая карта памяти.

SVCapture05 + SVCPlayer

SVCapture05 + SVCPlayer

Тип: плагин для снятия скриншотов и видео
Прошивка: от 2.71 SE-C - до 3.52 m33-4
Не тестировалась на 3.60м33. Точно не работает на 3.71 М33-2

Теперь, благодаря этому плагину, вы можете делать скриншоты и снимать видео (в формате GIF), а также смотреть снятое таким способом видео в специальном проигрывателе.

Восстановление брикнутой PSP


Благодаря данному программному обеспечению вы сможете самостоятельно превратить свою батарею и карту памяти в универсальный анбрикер, названный «Pandora».
Подключив эту чудесную батарейку к любой PSP с неисправным системным обеспечением, вы попадаете в меню восстановления, при помощи которого можно установить прошивку 1.5

ICQ-PSP

ICQ-PSP

Слушай любимую музыку и играй

Слушай любимую музыку и играй

Описание:Программа позволяет слушать музыку и одновременно просматривать фотографии, пользоваться браузером, играть в ISO, HomeBrew.

UMD Dumper

UMD Dumper

Предназначен для снятия образов с UMD-дисков (*.iso). Содержимое архива кидаем в PSPGAME150.Вставляем UMD, запускаем утилиту на PSP. Ждем. Получам готовый образ на карте памяти.

WINDOWS 95

WINDOWS 95

Год выпуска : 2006
Разработчик : Matan Gillon
Язык интерфейса : ENG
Платформа : PSP

Описание : Вы мечтали запустить на своей psp windows?Теперь у вас появиkась эта возможность, но есть ограничения: конфигурация оборудования накрепко прописана, так как система записана в виде образа, то нельзя устанавливать программы - тормозит. Мышка работает через одно хорошее место. Так что друзья максимум что можно сделать на этом эмуляторе,так это разложить пасьянс, погирать в сапёра, поёрзать мышкой и похвастатся друзьям=)

ISO_Compressor_1_0_0_8

ISO_Compressor_1_0_0_8

ISO_Compressor_1_0_0_8

Описание:
Программа для конвертирования всех образов игры в обе стороны.

Time Baby v.15(!)

1) Поддержка Cпящего режима. Включает, даже полностью Выключенную консоль
2) Календарь Лунных фаз. ДА, наконец он с нами!

3) Они говорят; теперь, даже если Вы остались без глаз, одно нажатие и услужливый Женский голос вернет Вам чувство Времени

- Снова поправлена работа Лунных фаз.
- Состояние будильника (on/off) теперь сохраняется с настройками пользователя.
- Оптимизирован код.

- Улучшен шрифт. - Изменено расположение Секундного дисплея.
- Улучшен режим Настройки цвета.

- Подправлена работа расчетчика лунных фаз.
- Добавлены дисплей Восхода и Заката с петушиным Воем на Восходе
- Частота PSP cpu меняется на 136/146/1.
- Авто обнаружение IRshell. В случае обнаружения Time Baby не изменяет частоту.
- Добавлен дисплей "Текуший День" - День недели, число, месяц.
- Добавлена опция Установки промежутка объявления Времени.
- Теперь Все меню и Часы одного цвета.
- Незначительные улучшения графики.

Читайте также: