Intro

If you have started woking on a Windows Mixed Reality project using Unity and Mixed Reality Toolkit, you might have encountered an annoying visual effect of flickering jagged edges AKA Aliasing, once you run the app on a physical immersive head mounted device (IHMD). The reason i am saying once you run it on physical device, is because during development and running inside Unity Game window this issue is not noticeable. The technique to solve aliasing in VR also applies to applications written to other VR devices like HTC Vive using Unity.

The following picture is for a sample scene comes with MRTK.

Workaround

Make sure you are running latest MRTK and Unity compatible with Windows MR. In my case, at the time of writing, i am using Unity MRTP5 and latest MRTK Dev Branch.

  1. Apply Project and Scene Settings to your application from the “Mixed Reality Toolkit” menu item
  2. Select “MixedRealityCamera” within “MixedRealityCameraParent” object and under “Camera” in the inspector tick “Allow MSAA”
  3. Under Unity’s QualitySettings select one of the highest levels, and set Anti Aliasing 2x, 4x, 8x (start with 4x MSAA)
  4. Apply SSAA; Add an empty object to the scene and attach to it a this script

Due to the classic trade-off between quality vs performance, keep tuning the above values (MSAA and SSAA) until you find the sweet point.
Definitely, the more powerful hardware you target, the easier to find the sweet point.
However, there are quite few techniques you can utilise [1, 3] to improve frame rate, like using baked lights, static objects, limit pixel light count, etc…
NOTE: For Unity VR development without using MRTK, like for HTC Vive, skip step 2.

Extras

What I found fascinating during my reasearch for the above workaround related to Aliasing, VR, and Graphics Performace, are the technical challenges of VR technology compared normal 3D apps and display monitors. For instance:

  1. The use of Forward Rendering pipeline in order to utilise MSAA to address the amplified negative visual effect; aliasing. VR suffers mainly from “temporal aliasing“, and the main contributing factor to aliasing in VR is head movement, and lower resolution.
    • Further reading [4, 5]
  2. The low latency requirements of such technology (approx < 20msec compared to 150msec in 3D games); time between user input to pixel displayed on screen, and how a new technique called TimeWarp helped to solve the problem.
  3. High frame rate requirements 60-90Hz compared to 30-60Hz for a 3D game on conventional monitors. And such high frame rate must cope with higher pixel throughput. Effectievely two monitors; rendering images for left and right eyes.

Resources

  1. Getting Started with VR Development, https://unity3d.com/learn/tutorials/topics/virtual-reality/getting-started-vr-development
  2. Performance recommendations for immersive headset apps , https://developer.microsoft.com/en-us/windows/mixed-reality/performance_recommendations_for_immersive_headset_apps#default_render_target_size
  3. Optimisation for VR in Unity, https://unity3d.com/learn/tutorials/topics/virtual-reality/optimisation-vr-unity?playlist=22946
  4.  Steven LaValle, VIRTUAL REALITY, http://vr.cs.uiuc.edu/
  5. The VR Book: Human-Centered Design for Virtual Reality, Section 21.4

 

Leave a Reply

Your email address will not be published. Required fields are marked *