360 image quality is terrible + aliasing/flickering + large seam

Hello,

I am developing an image navigation application for the Oculus Go. The app allows the user to change static 360 images by clicking certain buttons.

The problem is that the 360 images inside the Unity build and the editor are very low quality. The original image details are as follows:
Dimensions: 10000 x 5000
Resolution: 72 dpi
Bit depth: 24

When I upload that same image to the Oculus Go manually via the USB cable and browse it in the Oculus Gallery, it looks stunning. Inside Unity it looks terrible.
I made 2 screenshots from inside the Oculus Go so you could see the difference.

Oculus Gallery [spoiler] [/spoiler]

Built Unity Application [spoiler] [/spoiler]

From looking at the above images the difference doesn't seem that bad but while looking at them in VR the difference is huge.

For reference is the original image: link

Image Import Settings [spoiler][/spoiler]

Skybox Material Settings [spoiler] [/spoiler]

Quality Settings [spoiler] [/spoiler]

Player->Other Settings [spoiler] [/spoiler]

I am using Unity 2019.1.14f1.

Any ideas on how to get the image quality to the same level as in the Oculus Gallery? The current quality is simply unacceptable.

Thank you!

I have made a mistake. The image import settings I was changing were the settings for another image. So I tested with an image, which had its import settings set to the default lower resolution. So I guess the above settings can be used by anyone who has the same "quality problems" that I had.

I however now have another issue. While I did manage to get the quality up there is now a considerable amount of flickering or aliasing going on inside the Unity build and the editor. This is not the case inside the Oculus Gallery. I made a short video of this aliasing effect. Again, the effect is not that visible in the video but is a huge deal inside VR.

Video: link

Any help again would be much appreciated!

I have gotten a little better results when I enabled mip map generation and set the Resize Algorithm's format to RGB 24 Bit. But the quality is still not as good as it is inside the Oculus Go gallery but there is a huge seam running across the image, which converges at the bottom and top of the image. The top and bottom of the image is blurred.

Here is an image of that:
Blurred Image Bottom [spoiler] [/spoiler]

I dont know for sure, but try using ASTC 4x4 for texture compression.

I have found a way to get rid of the converging seam and blurred top and bottom.

In the import settings the Texture Shape must be set to Cube, Mapping set to Auto.
Then instead of using Skybox/Panoramic shader I used Skybox/Cubemap.

Setting the Texture Shape to Cube however dramatically increases the size of the image. In my case the size is 1.5Gb. I guess next is finding a good compression that doesn't lose much in quality. @V-J I will also try your suggested format. The build with this one image is around 460 megabytes. I definitely need a way to reduce the file size.

@V-J ASTC 4x4 is pretty good. It is even good enough with 6x6, which should be of lower quality but also requires lower disk space and ram usage. Using this I could even set the max resolution to 4096 vs the previous 8192. Though I'm not sure if setting the Texture Shape to "Cube" caps it at 4096 anyways. But setting the max size to 4096 did lower the size of image (at least in the editor. Maybe when setting it to 8192 the increased size is that only in the editor, and when building to Android it is shrunk to 4096 anyways).

It would be awesome if we could use a custom Resize Algorithm. I would really like to try Lanczos.

And another note is that using unity's built in AA (quality settings or via script with "QualitySettings.antiAliasing = 8;", the flickering and aliasing is actually worse. So it might be worth trying to disable Unity's anti aliasing.

Using ASTC 4x4 with no AA and no mip maps provides quite a clear image as well.

Since ASTC 4x4 provided me with an image of size around 50-70Mb, I tried lowering the quality by using higher and higher blocks of pixels. In the end I found out that ASTC 12x12 with a 4K image provides the same experience as 4x4, but the resulting image is multiple times smaller in size. I got it down to 15Mb. Only if I zoom in inside the Unity editor, I can see that the 12x12 loses some detail compared to 4x4. But this is not visible to the user in VR.

So for now, using a ASTC 12x12, a 4096x4096 texture (currently largest for Cubemaps anyways) and no mip maps with trilinear filtering and no built in AA (there seemed to be no difference between trilinear and bilinear filtering when mip maps were not generated) seems to produce the best result. There is a little bit of flickering, which can be reduced by generating mip maps but this makes the image blurrier.

I will test with other formats as well.

2 Likes

These kind of post are really useful, thanks for sharing your feedback.

Nice to know that you managed the desired quality level with ASTC! and thx for your in-depth feedback!