Как улучшить графику на псп
Я продолжаю тему программного эмулятора для 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 рендеринг происходит в отдельную видео текстуру, и размер этой текстуры определяет размер виртуальной камеры рендерера.
Установка текущего разрешения производится из панели настройки конфигурации:
Сравнить качество рендеринга при разрешениях 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 - Настройка чувствительности аналогового джостика
Описание: Этот плагин позволяет настроить чувствительность аналогового джостика.
Custom Theme Converter
Что бы кто ни говорил, но Сони кое-что берет у пиратов. Перед вами программа для создания собственных тем для прошивок 3.70 и выше, в том числе оффициальных. Созданные темы кидаем в PSP/THEME и включаем через Настройках темы. Для работы программы на компьютере необходим Microsoft NET Framework 3.0. Сам не проверял. PS: Есть еще FAQ по программе на японском, но я его не залил, так как знающих язык самураев очень мало.
Windows Vista PSP
CiSO Converter v11.00 GUI
SVCapture05 + SVCPlayer
Тип: плагин для снятия скриншотов и видео
Прошивка: от 2.71 SE-C - до 3.52 m33-4
Не тестировалась на 3.60м33. Точно не работает на 3.71 М33-2
Теперь, благодаря этому плагину, вы можете делать скриншоты и снимать видео (в формате GIF), а также смотреть снятое таким способом видео в специальном проигрывателе.
Восстановление брикнутой PSP
Подключив эту чудесную батарейку к любой PSP с неисправным системным обеспечением, вы попадаете в меню восстановления, при помощи которого можно установить прошивку 1.5
ICQ-PSP
Слушай любимую музыку и играй
UMD Dumper
Предназначен для снятия образов с UMD-дисков (*.iso). Содержимое архива кидаем в PSPGAME150.Вставляем UMD, запускаем утилиту на PSP. Ждем. Получам готовый образ на карте памяти.
WINDOWS 95
Год выпуска : 2006
Разработчик : Matan Gillon
Язык интерфейса : ENG
Платформа : PSP
Описание : Вы мечтали запустить на своей psp windows?Теперь у вас появиkась эта возможность, но есть ограничения: конфигурация оборудования накрепко прописана, так как система записана в виде образа, то нельзя устанавливать программы - тормозит. Мышка работает через одно хорошее место. Так что друзья максимум что можно сделать на этом эмуляторе,так это разложить пасьянс, погирать в сапёра, поёрзать мышкой и похвастатся друзьям=)
ISO_Compressor_1_0_0_8
Описание:
Программа для конвертирования всех образов игры в обе стороны.
Time Baby v.15(!)
1) Поддержка Cпящего режима. Включает, даже полностью Выключенную консоль
2) Календарь Лунных фаз. ДА, наконец он с нами!
3) Они говорят; теперь, даже если Вы остались без глаз, одно нажатие и услужливый Женский голос вернет Вам чувство Времени
- Снова поправлена работа Лунных фаз.
- Состояние будильника (on/off) теперь сохраняется с настройками пользователя.
- Оптимизирован код.
- Улучшен шрифт. - Изменено расположение Секундного дисплея.
- Улучшен режим Настройки цвета.
- Подправлена работа расчетчика лунных фаз.
- Добавлены дисплей Восхода и Заката с петушиным Воем на Восходе
- Частота PSP cpu меняется на 136/146/1.
- Авто обнаружение IRshell. В случае обнаружения Time Baby не изменяет частоту.
- Добавлен дисплей "Текуший День" - День недели, число, месяц.
- Добавлена опция Установки промежутка объявления Времени.
- Теперь Все меню и Часы одного цвета.
- Незначительные улучшения графики.
Читайте также: