Avoid shimmering / flickering effects on Quest 2 /3

I’m trying different scenes on VR, but I always experiment many artifacts…
I’m using multiview: true - antialias:true and preserveDrawingBuffer: true, for the engine, but the final render scene presents always many shimmer effects along the corner of the objects or along the edges of the meshes…
The scene presents many shimmering and flickering areas, very annoing…
What can I do to avoid this effects?

Here an example with a grass field (Anyone can experiment the annoynig effect with a Oculus Quest or similar?):

https://www.topspinseo.com/BabylonJs/grass/

Thanks to Roland for the code about the shader.
Thanks to Joe_kerr for another code and many hints.

@RaananW any ideas? Not sure if this is a Babylon issue or a Quest limitation or something else…

This is more of a headset limitation than a babylon issue. It is also a very “VR” issue - your head moves constantly. It wouldn’t shimmer if you wouldn’t always make small adjustments to your head’s position. It will probably be the same, if you hold the mouse on the desktop and slightly move it randomly.
I wonder - is it the same if you don’t use multiview?

Hi RaananW , sorry for the late of my reply. Yes it seems the same with multiview. When I’ve tested this issue with Unreal Engine I noticed that it was less evident changing antialias settings.
What about antialias with BabylonJs? Another thing: what about webgpu with WEBXR? I’ve tried to use thin instances but if I well understand WEBXR doesn’t support webgpu… so no advantadge in using such tools with webxr?

Thanks in advance
Frank

1 Like

Did you check if this effect was on both eyes? I remember having the same issue with just the right eye, as if antialiasing was happening only on the left one. I had to manually apply antialias after the XR camera was recognized with an observable.

No WebGPU support in WebXR. There is an attempt to provide support (GitHub - immersive-web/WebXR-WebGPU-Binding) but AFAIK no headset supports this. Never tested TBH.

About aliasing - babylon fully supports antialias, with the limitation of the headset and environment.

FYI this seems to be gaining traction again as someone has proposed adding the topic to the agenda of the next meeting. If anyone wants to support this I would encourage attending : )

1 Like

So, at this moment, there are some advantages using instances and thin instances on Quest 2?
And where I can find details on babylonjs antialias options working on Quest 2?
Thanks

When initializing WebXRGLLayer you can pass an options object that defines antiaalias on/off:

Babylon sets it to true per default: Babylon.js/packages/dev/core/src/XR/webXRManagedOutputCanvas.ts at master · BabylonJS/Babylon.js (github.com)