Skip to content

Latest commit

 

History

History
115 lines (73 loc) · 8.29 KB

README.en.md

File metadata and controls

115 lines (73 loc) · 8.29 KB

PSVR2 Upscaler

日本語 · Download · Report an issue

Apply AMD FSR 1 EASU spatial upscaling to PSVR2 PCVR output through SteamVR. The tool lowers VRChat's rendering resolution and reconstructs the image with an edge-adaptive filter.

It uses CustomHeadsetOpenVR's display shader replacement in SteamVR's vrcompositor.exe. It does not modify game files or inject a DLL into the VRChat process.

Requirements

  • 64-bit Windows and a PSVR2 already working in PCVR.
  • SteamVR and the PlayStation VR2 App. Check normal headset operation first.
  • CustomHeadsetOpenVR 1.3.0. Extract the entire official release ZIP and run CustomHeadsetGUI/custom-headset-gui.exe to install the driver. When updating it, reinstall the driver from its About page. Official installation instructions
  • Windows PowerShell 5.1, included with Windows. Visual Studio and Python are not required for normal use.

This release supports the original CustomHeadsetOpenVR 1.3.0 shader. Installation stops if a different version or an unknown shader modification is detected. SteamVR, CustomHeadsetOpenVR, and other external software are not bundled.

Quick start

  1. Download PSVR2-Upscaling-v0.1.0.zip from Releases and extract the entire folder.
  2. Exit SteamVR and VRChat.
  3. Double-click Start-PSVR2-Upscaling.cmd.
  4. Start with 67% rendering resolution and click 「導入する」 (Install). For later resolution changes, click 「設定を適用」 (Apply settings).
  5. Start SteamVR and VRChat, then inspect the image in your headset.

The interface currently uses Japanese. 「状態を更新」 (Refresh status) checks saved files and settings. An installed status does not by itself prove that the current SteamVR process is executing the shader. Changes take effect on the next SteamVR start.

Resolution and performance

67% refers to pixel count. Each dimension is approximately 81.9% of the equivalent 100% setting. Raise it to prioritize image quality, or lower it to reduce the number of rendered pixels.

FPS depends on the world, avatars, and GPU and CPU load. Running at half the headset's refresh rate also depends on workload and SteamVR reprojection settings. This is not frame generation, and it does not guarantee a particular FPS improvement or full-refresh-rate rendering.

For a useful comparison, keep the world, avatars, and viewpoint unchanged and compare frame times. Controlled FPS comparisons have not yet been performed.

What changes

  • CustomHeadsetOpenVR's shader and custom-filter settings.
  • VRChat's per-application rendering resolution in SteamVR. Global SteamVR resolution and refresh rate are left unchanged.

The custom filter is shared by CustomHeadsetOpenVR and may affect other games and supported headsets. VRChat's per-application resolution is not headset-specific either. EASU is excluded from SteamVR overlays and the dashboard.

Restore or update

Exit SteamVR and VRChat, then click 「元に戻す」 (Restore). This restores the original shader and the managed settings from before installation. Unrelated settings changed afterward are preserved.

Backups are stored in %LOCALAPPDATA%\PSVR2Upscaling. Keep them until restoration is complete. If another tool has changed a managed shader or setting, restoration reports the conflict instead of overwriting it.

Before installing a newer release, restore with your current release first. Also check compatibility after updating SteamVR or CustomHeadsetOpenVR.

Troubleshooting

Problem Action
CustomHeadsetOpenVR is not found Install its driver through the official GUI; extracting its ZIP alone is insufficient.
Version or original shader does not match Check that the original 1.3.0 files are installed. Do not stack this patch on unknown modifications.
Running processes are reported Exit SteamVR and VRChat, then retry.
Access is denied Check write permissions for the reported location. This tool does not automatically elevate to administrator.
The image looks wrong Exit SteamVR and VRChat, restore, and check normal headset output.
Restoration reports a conflict Inspect the listed setting and the backup. Do not delete the backup to retry.

Include Windows, GPU, SteamVR, and CustomHeadsetOpenVR versions and the error in an issue. Redact usernames and personal paths from logs.

How it works and validation

The pipeline is: low-resolution stereo images → EASU resampling combined with SteamVR distortion correction → PSVR2. It does not allocate a separate high-resolution intermediate image. It preserves distortion coordinates for each RGB channel, clamps taps to the current eye's region, and uses ordinary sampling where the mapping locally minifies the image.

This is the EASU portion of FSR 1. It does not include the separate RCAS sharpening pass, FSR 2/3/4, frame generation, or eye-tracked foveated rendering.

Verified on 2026-10-06:

  • 36 GPU readback checks passed on an AMD Radeon RX 9070, including black and flat images, eye boundaries, alpha, minification, and comparison with AMD's original implementation.
  • Nine shader permutations compiled using actual SteamVR shader declarations.
  • Shader replacement inside the compositor and stereo rendering were verified with a physical PSVR2.
  • VRChat launched through its normal Steam/EAC route and continued producing frames. A headset user reported that the resulting image looked good.

Long-duration stability and controlled FPS comparisons remain untested. These observations are not official EAC approval or a guarantee of future compatibility. This project is not an official Sony, Valve, AMD, or VRChat product.

Command line

Run from the repository or extracted folder:

.\scripts\Invoke-HostPsvr2Upscaling.ps1 -Action Status
.\scripts\Invoke-HostPsvr2Upscaling.ps1 -Action Install -ResolutionScale 67
.\scripts\Invoke-HostPsvr2Upscaling.ps1 -Action Configure -ResolutionScale 80
.\scripts\Invoke-HostPsvr2Upscaling.ps1 -Action Uninstall

Add -DryRun to inspect planned changes. On initial installation, -SkipResolutionScale preserves VRChat's existing per-application resolution.

The wrapper starts a hidden Windows PowerShell process through WMI to access the settings used by normal SteamVR. This avoids AppData virtualization differences when launched from an MSIX app. It does not automatically elevate or persistently change PowerShell execution policy.

Development

Fetch the pinned upstream source and regenerate the derived shader:

git clone https://github.com/sboys3/CustomHeadsetOpenVR.git external/CustomHeadsetOpenVR
git -C external/CustomHeadsetOpenVR checkout 21185da63a9e4307ae876b3702a43a43044d451c
git -C external/CustomHeadsetOpenVR submodule update --init --depth 1 ThirdParty/openvr
.\scripts\Build-CompositorShader.ps1
  • Build-CompositorShader.ps1 -Compile requires Windows SDK fxc and actual SteamVR shader declarations captured by CustomHeadsetOpenVR.
  • Test-Psvr2Gpu.ps1 builds a D3D11 validation program with Visual Studio C++ tools and reads back GPU results.
  • Test-Psvr2Vr.ps1 builds and checks shaders. -Probe reads headset state; explicit -Run displays a test scene.

Developer scripts are included in the full repository. The user release ZIP contains only the files needed to install, configure, and restore. Validation outputs are written to directories such as artifacts/.

License and credits

The project is distributed under GNU GPL v2. The AMD EASU-derived file retains its MIT license notice. See THIRD_PARTY_NOTICES.md for component sources, modifications, and licenses.

Thanks to CustomHeadsetOpenVR, AMD FidelityFX-FSR, and Valve OpenVR.