PPSSPP
1. 개요
PSP의 다기종 에뮬레이터. PSP 에뮬레이터로 유명한 JPCSP의 약점인 Java 대신 C++로 개발 중이며, 오픈소스다.
2. 특징
윈도우, 리눅스, OS X 뿐만 아니라 안드로이드, iOS[1] , 블랙베리도 지원한다. 즉, 다양한 스마트폰에서 플레이가 가능하다는 말. 콘솔 중 Wii U 및 스위치로도 홈브류로 이식되어 있다.
Dolphin의 전 개발자가 만드는 에뮬레이터라는 점에서 일단 신뢰가 가능하다.
JPCSP와의 가장 큰 차이점은 역시 속도. 웬만한 PC에서는 비등방성필터링 16배와 풀해상도로 게임하는 것이 얼마든지 가능하다.
지원하는 기능
- 고해상도 렌더링. OpenGL, DirectX, Vulkan 플러그인을 통해 PSP의 네이티브 해상도(480x272)의 정수배로 렌더링한 후 화면 크기에 맞춰 출력한다. 기본 설정은 GPU의 지원 여부에 따라 Vulkan, OpenGL, DX11 순이다. OpenGL은 가장 오래됐고 안정적인 플러그인이며, 나중에 추가된 DirectX는 GPU에 따라 더 빠를 수도 있다. Vulkan은 상당히 빠르지만 1.5.3 버전 기준 최신 기능이라 버그가 제법 있다.하지만 OpenGL의 속도 업뎃으로 차이가 크진 않다.[2] 화면 출력의 위치와 크기, 영상 확대/축소시 샘플링 방식은 설정에서 변경 가능하다. 다운샘플링은 "버퍼드 렌더링"에서만 사용 가능하다. GPU 부담이 심한 기능이지만, 병목이 되는 쪽은 십중팔구 CPU기 때문에 별 걱정 없이 고해상도를 이용할 수 있다.
- 커스텀 텍스처. 2016년에 처음 도입된 기능이다. 이미 포럼에서는 페르소나 3등의 몇몇 HD 텍스처 팩이 작업 중이고, 다운로드할 수 있다.
- 텍스처 스케일링. xBRZ 등의 필터를 텍스처에 적용해 선명하게 볼 수 있다. CPU 부담이 심한 기능. 처음에는 이 과정에서 텍스처를 불러오는 시간이 길어지면 그대로 랙이 걸리는 구조였지만 언젠가부터 시간 내로 처리하지 못한 텍스처는 일단 원본 화질로 사용한 뒤 천천히 처리하도록 바뀌었다. 특히, 2D 그래픽이 많은 게임의 경우 최선의 화질을 얻고 싶다면 디스플레이 해상도 이상으로 필터링을 가해야 하는데, 이렇게 되면 CPU 부담이 은근히 크다. 완전히 도트 게임이라면 후처리 셰이더를 이용하는 편이 낫다.
- 게임에 따라 프레임레이트를 높일 수 있다. 게임에 따라서는(주로 프레임 동기화를 걸어 놓은 게임) PSP의 CPU 클럭을 높이면 프레임레이트가 변하는 경우도 있다. 에뮬레이터 자체의 기능은 아니지만, 일부 게임은 에뮬레이터의 우월한 성능을 활용해 60fps로 구동할 수 있는 치트 코드가 있다. 다른 콘솔에도 이런 치트 코드는 제법 있지만 PSP는 가변 프레임레이트로 설계된 게임이 많은 덕에 아무 부작용 없이 원활하게 작동하는 코드들이 상당히 많다.
- 후처리 셰이더. FXAA같은 효과를 걸어 줄 수 있다. PPSSPP는 MSAA를 지원하지 않기 때문에 슈퍼샘플링을 사용하기가 힘들다면 FXAA에 의존할 수밖에 없다. GPU 제어판에서 강제로 걸어 줄 수는 있지만 그나마도 "버퍼 효과 생략" 설정에서만 먹힌다고 한다. 해당 설정은 호환성을 상당 부분 깎아먹는 대신 퍼포먼스를 눈에 띄게 향상시켜 주는 비권장 핵이다.
구동 성능도 상당히 뛰어나지만 각종 그래픽 요소가 로드되는 과정을 볼 수 있거나 명령어가 아닌 데이터를 얻기 위한 메모리 접근에도 브레이크 포인트를 만들 수 있는 등 디버깅 기능도 부족하지 않다.
3. 버전별 특징
2012년 11월 12일에 거의 처음으로 공개되었으며 0.2 버전으로 나왔다. 영상에서 시험구동한 게임은 울트라 퍼즐버블 포켓이다. #
2013년 1월 27일 0.6.0 버전이 릴리즈되었다. ARM 기반 버전(당연히 안드로이드가 포함된다!)에서 JIT 컴파일러를 지원하게 되어 놀라울 정도로 빨라진 에뮬레이팅 속도를 자랑하게 되었다! 단 아직 퀄컴 스냅드래곤 SoC는 버그 때문에 해당 SoC를 탑재한 기기에서는 JIT 컴파일러를 지원하지 않았지만.. 바로 2일 후인 29일에 0.6.1 버전이 릴리즈되면서 JIT 컴파일러에 관한 스냅드래곤 SoC에서의 버그를 수정하여 거의 대부분의 ARM 기반 기기들이 JIT 컴파일러를 사용할 수 있게 되었다.
2013년 3월 11일에 0.7.0 버전이 릴리즈되었다. 최적화와 호환성이 나아졌다고 한다.(아직까지 호환성은 그닥...)
에뮬레이터 구현에서 가장 난관은 동영상(H.264)과 ATRAC3+ 디코더(음원)였다. ATRAC3+ 디코더는 법정 분쟁까지의 위험도 있을 수 있다고 했는데 0.7.6-1025 베타버전부터 동영상과 BGM 문제가 거의 해결되었다. 단 몇몇 게임은 BGM이 들리지 않는 경우도 있다. JPCSP 쪽에서는 여러 디코더가 등장했으나, PPSSPP 쪽에서는 JPCSP에서 제시된 ATRAC3+ 포맷 우회재생방법을 적용하는 방안에 대해서는 고려하고 있지 않다고 한다. 주된 이유가 DLL 파일을 이용하는 방법은 윈도 머신에서만 사용가능한데 반해 PPSSPP는 모든 기기에서 사용 가능한 범용성을 목적으로 하고 있기 때문이다. 따라서 JPCSP에서 사용한 방법은 PPSSPP에서 사용이 불가능하다. 그래서 PPSSPP는 한동안 자체 구현한 ATRAC3+ 디코더로 이 문제를 해결하였다가 결국 0.9.5 버전을 기점으로 리버스 엔지니어링에 성공해 ATRAC3+ 디코더가 필요 없게 되었다.
그 외로 플레이스토어에 올라오는 것이 아닌 홈페이지에 직접 올라오는 베타버전이 있는데 4월 20일자로 설정 언어 중 한국어가 추가되었으며 처음에는 설정을 해도 글자가 깨졌지만 이후 버전에서 완전하게 한국어로 설정을 할 수 있게 되었다. 롬파일을 찾을 때 쓰는 에뮬레이터 내장 탐색기에서는 여전히 한국어가 일부 깨져 보인다. 다만 동작에 지장은 없다.
2013년 6월 8일, 0.7.6-1448 버전부터 64비트 OS(윈도우 한정)를 지원한다.
스마트폰판은 터치 패널에 반투명한 키를 띄워서 이를 터치하는 식으로 조작하게 되는데, 이게 방향키에서 조금만 벗어나도 바로 '''대각선으로 이동하는 것'''으로 인식해 버린다. 뿌요뿌요같은 퍼즐 게임이나 다른 액션 게임처럼 방향 조작이 중요한 게임 플레이시에는 상당한 혈압 유발의 원인이 되므로 주의.[3] 다행히도 엑스페리아 플레이나 NVIDIA SHIELD Portable같은 패드가 달린 기기라든가, 그 외에 안드로이드 기기에 연결할 수 있는 게임패드를 지원한다. 하지만 엑스페리아 플레이는 기기 성능이 딸려서 PPSSPP로 PSP 게임을 하는 것은 정신건강에 좋지 않다. 지금은 어느정도 괜찮은 듯하다.(참고)
2014년 12월 25일 현재 최신 버전은 0.9.9.1 안드로이드 버전의 경우 광고가 추가. 0.9.5 버전은 설치 경로에 한글로 된 폴더가 존재하면 치트 및 스크린샷 저장 기능이 작동하지 않았다.
0.9.8 버전부터 VNR로 일부 게임은 텍스트 후킹이 가능하다.
수시로 업데이트되는 베타 버전은 여기서 받을 수 있다.
PSP 자체의 사양이 낮고 모바일과 PC 모두 개발하다 보니 좋은 최적화로 인해 7년 된 PC로도 철권 6를 풀프레임으로 플레이 가능할 만큼 최적화가 잘 되어 있다. 내장 그래픽 유저도 일정 수준의 AA와 랜더링 효과를 넣어도 프레임 드랍이 잘 발생하지 않는다.
2015년 2월 1일 대망의 1.0 버전이 나왔다.이 버전부터 '''게임별로 옵션 설정이 가능해졌다.''' 다만 1.xx대 버전에서 멀티 플레이 시 채널에 빈 자리가 있음에도 불구 하고 풀방 메시지가 출력 되며 접속이 불가능한 버그가 있으니 참고 하도록 하자.
2015년 2월 26일 1.0.1 버전이 나왔다. 스테이트 세이브 손상 스크롤과 함께 포함된 1.0버전과 기타 버그를 수정하였다. v0.9.5-959-g4998044 로 인한 PowerVR 장치 호환성이 개선되었다.
2015년 10월 4일 1.1 버전이 나왔다. 안드로이드에 ARM64 지원 및 기타 최적화를 하였다. GPU 에뮬레이션이 수정, sceAtrac 음악 호환성, SaveData 관리를 위한 UI 호환성 등이 개선되었다.
2015년 10월 12일 1.1.1 버전이 나왔다.
1.1.0 버전의 충돌 버그를 수정하였다. 갤럭시S6로 페르소나와 같은 게임등을 기동할 때의 ARM64 충돌을 고쳤다. 스테이트 세이브를 로드할 때 충돌을 수정하였다. 1.1 버전까지의 네트워크 풀방 관련 버그가 수정 되었다.
2016년 2월 14일에 1.2.0 버전이 나왔다. 일정 시간동안 사용하지 않을 시 터치 조작부가 숨겨지는 기능과, 몇 개의 키를 동시에 누를 수 있게 하는 콤보 키 기능 등이 추가되었다. 그 외에도 오디오 리버브 기능과 각 게임별 볼륨 조정이 가능하게 되었고, UI 부분이 일부 변경되었다. 그러나 안드로이드 버전은 패치 이후 일부 게임에서의 프레임 드랍, 실행 자체가 안되는 문제로 인해 유저들의 불만이 폭발하고 있다.
2016년 2월 17일에 1.2.1 버전이 나왔다. 안드로이드 기기에서 앱 전환 시 충돌 현상이 발생하던 것을 수정했다. 그리고 중국어와 한국어 폰트를 업데이트 하면서, 해당 언어에서 일부 보이지 않던 문자가 보이게 되었다. 다만, 완전히 보이는 것은 아니고, 일부 글자는 아직도 안 보인다. 아직 안드로이드 버전의 프레임 드랍 문제는 해결되지 않았다.
2016년 3월 19일에 1.2.2 버전이 나왔다. 안드로이드 기기에서의 그래픽 처리 방식을 기존 방식으로 되돌렸다. 이 외에도 버텍스 캐시 처리 성능 향상과 같은 그래픽 문제 수정과, ISO 파일 처리 속도 향상이 이루어졌다.
2016년 9월 17일에 1.3.0 버전이 나왔다. 게임 영상의 녹화 기능과 TAS 기능이 추가되었다. 그리고 앱 전환 시에 일어나는 문제들의 수정과, 갤럭시 S7과 iOS 9버전 이상의 기기에서 일어나는 JIT 문제가 수정되었다. 또한 커스텀 텍스처 로드가 가능해졌다.
2016년 9월 19일에 안드로이드에서만 1.3.0.1 버전이 긴급 업데이트로 나왔는데, 대기모드시에 강제종료되는 문제가 긴급수정되었다.
2017년 3월 31일에 1.4.0 버전이 나왔다. 다이렉트X 11의 추가 지원이 이루어졌다. 또한, 호환성 이슈와 관련된 버그가 수정되었다.
2017년 5월 23일에 1.4.1 버전이 나왔다. 이 버전에서는 UI 배경 이미지 지원이 추가되었고, 소프트웨어 렌더링 기능이 강화되었다.
2017년 5월 27일에 1.4.2 버전이 나왔다. 이 버전에서는 소프트웨어 렌더링 충돌과 ARM64에서 구동 시 충돌을 일으키게 만드는 버그의 수정이 이루어졌다.
2017년 11월 29일에 1.5 버전이 나왔다. 이 버전부터 Vulkan을 지원하며, 그래픽 관리 기능의 강화로 CPU 점유율이 줄어들었다. 또한, 이전에 지원하지 않던 아랍어와 기타 여러 언어가 추가되었다. 그러나 Vulkan 지원이 아직 불안정한 관계로 문제 수정이 된 버전업판이 며칠 간격으로 계속 올라오고 있다. 버전 1.5 출시 3시간만에 1.5.1 버전으로 버그픽스판이 올라왔으며, 2017년 11월 30일에 1.5.2 버전, 2017년 12월 2일에 1.5.3 버전, 그리고 1.5.4 버전이 2017년 12월 5일에 올라왔다.
2018년 5월 26일에 1.6 버전이 나왔다.이 버전에서는 OpenGL의 멀티스레드와 벌칸의 속도향상, 리눅스 지원 등이 있었다.
2018년 10월 27일에 1.7 버전이 나왔다.
2019년 3월 14일에 1.8 버전이 나왔다.
2019년 9월 25일에 1.9 버전이 나왔다.
2020년 6월 27일에 1.10 버전이 나왔다.
2021년 2월 7일에 1.11 버전이 나왔다.
4. PPSSPP/호환성 리스트
PPSSPP/호환성 리스트 항목 참조.
[1] 과거에는 탈옥을 해야만 JIT 컴파일러를 사용가능해서 정상적인 속도가 나왔었지만 2020년 기준 스마트폰의 AP가 준 데스크탑 클래스의 성능을 뽑아냄에 따라 인터프리터 방식으로도 프레임을 정상적으로 뽑고 배속까지 가능할정도로 성능이 좋아져서 Altstore나 시디아 임팩터같은 사이드로더 방식으로 설치해도 정상적으로 PPSSPP를 사용할수있게 되었다.[2] 그후 OpenGL의 속도업뎃이 계속되어 이젠 OpenGL이 더 프레임이 높게나온다. [3] 다만, 설정에서 버튼 크기와 간격을 조절하면 해결이 가능하다