跳到主要內容

shadPS4:開源 PS4 模擬器,用 C++ 跑 Bloodborne 的那個

shadps4-emu/shadPS4 on GitHub

模擬 PlayStation 4 的難度,遠低於大多數人的預期——因為 PS4 本身就跑在 x86-64 架構上。shadPS4 就是把這個洞挖到底的專案:不需要 ISA 翻譯層、不需要動態再編譯,直接執行 PS4 的原生指令集,然後把 GPU 呼叫用 Vulkan 重新實作出來。

30.8k stars、多平台支援(Windows、Linux、macOS、FreeBSD)、能跑 Bloodborne。這個專案值得認真看一眼。


PS4 模擬為什麼比 PS3 容易

PS3 用的是 Cell 處理器——IBM 和 Sony 聯合設計的異構多核心架構,和 x86 差異巨大,模擬成本極高,RPCS3 花了超過十年才把相容性做到今天的水準。

PS4 的決策完全不同:採用 AMD Jaguar x86-64 CPU + AMD GCN GPU。這個選擇讓索尼更容易移植 PC 遊戲,但也讓模擬器開發者省去最麻煩的一塊:

沒有 ISA 重新編譯的必要。 PS4 遊戲的 CPU 指令可以直接在 x86-64 主機上執行,模擬器的主要工作變成:作業系統 API 的 shim 層、GPU 指令集轉換(GCN → Vulkan)、檔案系統和記憶體配置的模擬。

Loading diagram...

架構:98.5% C++,全 Vulkan

整個 codebase 的技術選擇相當純粹:

語言:98.5% C++,其餘是少量 GLSL(shader 程式碼)和 CMake。沒有 Rust、沒有中介層,就是 C++ 硬做。

GPU:全面採用 Vulkan API。這讓 shadPS4 在 Windows、Linux、macOS(透過 MoltenVK 橋接)上都能用同一套渲染後端。Metal 在 macOS 上的支援也在開發中。

CPU:因為 x86-64 對齊,CPU 模擬的複雜度大幅降低。主要工作在於 kernel 呼叫的重新導向和 PS4 特有 syscall 的實作。

韌體:這是唯一的灰色地帶。shadPS4 需要從真實 PS4 主機 dump 出來的韌體模組才能正確執行遊戲。這部分不在 repo 裡,使用者必須自己準備。


可運行的遊戲

官方測試通過的 AAA 標題包括:

  • Bloodborne — 對很多人來說,這個名字就夠了
  • Dark Souls Remastered
  • Red Dead Redemption
  • Detroit: Become Human
  • Persona 5 Royal

相容性清單持續更新,社群在 GitHub Issues 和 Discord 上追蹤每款遊戲的狀態。目前仍有很多遊戲不可玩或有明顯 bug,但能跑 Bloodborne 這件事本身就是一個信號:核心渲染和 CPU 模擬已經到達可用的水準。


多平台支援

# 從 source build(以 Linux 為例)
git clone https://github.com/shadps4-emu/shadPS4
cd shadPS4
cmake -S . -B build/ -DCMAKE_BUILD_TYPE=Release
cmake --build build/ --parallel $(nproc)

# 執行(CLI 模式)
./build/shadps4 /path/to/game.pkg

Windows 使用者可以直接下載 Release 頁面的預編譯執行檔。macOS 需要 MoltenVK,FreeBSD 支援也已在主線。

另外有獨立的 Qt-based GUI launcher,讓遊戲庫管理和設定調整更直觀——對不想用 CLI 的使用者來說這是更實際的入口。


開發團隊與授權

這是社群驅動的專案,核心貢獻者包括 georgemoralis(主要架構)、psucien(GPU 子系統)、viniciuslrangel(多平台支援),以及數十位社群貢獻者。

授權是 GPL-2.0——任何使用這個 codebase 的衍生作品都必須同樣開源。這個選擇讓商業公司無法悄悄拿走成果,確保改進留在社群。


和 RPCS3 的比較

shadPS4RPCS3
目標主機PlayStation 4PlayStation 3
CPU 架構x86-64(直接執行)Cell(需要模擬)
開發難度相對低極高
成熟度早期但進展快十年打磨、相容性高
GPU 後端VulkanVulkan + OpenGL

RPCS3 是迄今技術難度最高的家用主機模擬器之一,shadPS4 則是站在 PS4 架構設計的便宜上快速推進。兩者沒有競爭關係,面對的是完全不同的工程問題。


侷限與現實

幾個需要清楚認識的點:

韌體依賴:必須自行 dump PS4 韌體,這意味著你需要一台真實的 PS4 主機。這一步的合法性取決於你所在地區的法律,專案本身不提供韌體。

相容性還不完整:大量遊戲仍無法正常運行或有嚴重 bug。「能跑 Bloodborne」不等於「能跑所有 PS4 遊戲」。

效能調校:模擬器的效能最佳化還在早期階段,部分遊戲在高端硬體上也會有掉幀問題。

DRM 遊戲:帶有 PS4 加密保護的正版遊戲需要額外的解密步驟,這塊更複雜。


為什麼值得關注

shadPS4 在技術上做了一件有趣的事:它讓人重新思考「模擬」這個詞的邊界。當目標硬體的 ISA 和主機完全一致時,「模擬器」做的更像是一個相容層——把 PS4 的 syscall 和 GPU 呼叫重新對應到主機作業系統和 Vulkan API。

這個設計的代價是韌體依賴,收益是開發效率和跨平台可移植性都比傳統模擬器高很多。三年不到,從零到能跑 Bloodborne,這個速度說明架構選擇有多重要。

GPL-2.0、C++、Vulkan、社群驅動——如果你對低層系統工程或圖形 API 有興趣,shadPS4 的 codebase 是一個值得研究的真實案例。