Performance Tuning Guide¶
Achieving an optimal VR experience on resource-limited hardware is key to delivering a smooth and comfortable user experience. If the frame rate of content rendering drops below the device’s refresh rate, users will perceive stutter. Please refer to the Mobile VR Performance Checklist for performance optimization.
If the performance bottleneck is the GPU, WaveSDK provides two features to improve GPU performance by reducing local or overall image quality:
- Adaptive Quality (AQ)
- Foveated Rendering
Developers should initially try the Quality-Oriented Mode of AQ and consider the Performance-Oriented Mode when further performance improvements are needed.
Adaptive Quality (AQ)¶
Adaptive Quality (AQ) dynamically adjusts image quality to optimize or conserve GPU performance. When AQ is enabled, the system adjusts following items dynamically based on the current mode and system performance metrics:
- CPU/GPU performance levels: By modulating CPU/GPU performance levels, performance can be optimized or conserved.
- Dynamic Resolution: By adjusting the resolution, GPU performance can be enhanced or conserved.
- Auto Foveation: By degrading the quality of peripheral image rendering, GPU performance can be optimized or conserved. The effect ranges from weak to strong, with four levels in total: Default, High, Middle, Low. The stronger the effect, the more GPU performance is conserved, but the mosaic effect on peripheral images becomes more noticeable.
In the Unity/Unreal development environment, we provide three selectable modes:
- This is the default mode and can be the starting point for developers.
- Dynamic resolution begins at the maximum resolution and does not drop below the default resolution.
- Auto Foveation only switches between High and Default, with the peripheral image mosaic effect being barely noticeable.
- Image quality will not degrade even if the FPS cannot reach the refresh rate.
- This mode further degrades image quality when FPS can’t meet the refresh rate, to boost performance.
- Dynamic resolution starts at the default resolution and won’t exceed it.
- Auto Foveation switches between Default, High, Middle, and Low.
- The mosaic effect in peripheral images will be more noticeable when Auto Foveation switches to Middle or Low.
- As FPS decreases, image quality gradually degrades. If the FPS is below half of the refresh rate, peripheral image quality will drop to its lowest and become noticeable to users. If the FPS drop is not temporary, please refer to the Mobile VR Performance Checklist to optimize and reach the target FPS.
- Developers can choose which features to enable.
- Developers can define the upper and lower limits of dynamic resolution.
- When Auto Foveation is enabled, it switches between Default, High, Middle, and Low.
If developers wish to further leverage Foveated Rendering for performance improvements, consider disabling Auto Foveation and choosing one of the following modes that best suits your situation:
- Without eye-tracking hardware, the clear area is fixed and covers almost all the visible range, reducing resolution only in peripheral areas that are hard to notice.
- With eye-tracking hardware, the clear area shrinks and moves to cover the user’s gaze when they look at the screen edges.
- The clear area size is determined by the current motion of the head-mounted display.
- The faster the head-mounted display moves, the smaller the clear area.
- When the head-mounted display is stationary, the clear area is the same as in Default mode.
- Currently, this mode does not interact with eye-tracking hardware.
- Developers can define the offset of the center of vision, the clear area, and the quality of the edges.
- It’s recommended to start with Default mode. In most scenarios, you can enhance GPU performance by reducing the quality of peripheral areas that aren’t easily noticeable.
- You can further boost GPU performance during head motion with Dynamic mode. However, objects moving with the head-mounted display might appear of reduced quality during motion.
- Enabling Foveated Rendering consumes a fixed amount of GPU performance, varying from 1% to 6% depending on the Eye buffer size. When the scene uses simple shaders, the performance saved might be less than the fixed GPU consumption, resulting in a performance drop. Enable or disable according to your needs.