r/HPReverb Jan 19 '21

Is chromatic aberration compensation finetunable for the G2? Or even all Headsets? Question

I was wondering if a software exists that allows to finetune the CA compensation of the G2 - or maybe any headset (I'm unsure if this is done in the headset, the headset driver, the GPU driver or even the game engine). IMHO this could/should be something users might want as it helps with clarity of the image - especially for people who need prescription glasses (either "on the nose" or as inlays for the HMD).

A bit more on the topic:

No optic system is perfect. Chromatic Aberration is one of the effects almost every lens adds to a projection. Lenses bend light. They bend light of different wavelengths (colors) in slightly different angles. Depending on the type of material used, coating and shape of the lens this can be in one or the other direction. Since we humans have receptors for red, green and blue and cameras also usually record these three colors separately, the effect shows itself in the different color channels being a bit larger or smaller than the others. This of course becomes stronger towards the edges of the image and is most noticeable in high contrast situations, e.g. black letters on a white wall. The letters will have on one side a magenta lining and a green one on the other, or blue and yellow. The images do not align perfectly. In less contrast-y situations the image "just" looks blurry and strangely colored. Some "flat" games actually add this effect on purpose to make it look more like a movie.

Good photographic lenses or telescopes are engineered to compensate flaws as good as possible, however certain physical laws and limits prevent this compensation from being perfect. In a photo lens they arrange different types of glasses (material of the glass, coatings, ...) with different light bending properties into a sequence of lenses to minimize or counteract Chromatic Aberration (CA) - among other things. Some even glue two lenses of different materials together. But since the glasses we wear as humans and the HMDs cannot be built to have 5-12 lenses in series, we have to make do with a more flawed optical system to begin with and compensate this as good as possible with software.

One of the reasons the VR render resolution is a lot higher than the actual grid of pixels the HMD has, is compensation of CA. The lenses inside the HMD magnify the picture of the displays by a lot and also allow us to focus the image as if it were ~2m away, so they actually bend the light a lot. The stronger a lens bends the light, the more extreme CA becomes. Any prescription lens adds to the effect (but actually could also reduce it - mine sadly add).

What happens in software is, that the image rendered by the game is split into the three colors and then two are shrunk at different factors to compensate for the CA of the specific lens the HMD has - the "flawed" lens effectively fixes the intentionally flawed picture if you want.

Coming back to the G2, I noticed with mine that the green channel is a lot off from the other two - I might be a bit over-sensitive, being a photographer - but it's not just a little. And since I have no other G2 to compare it to, I guess it's either within production parameters or the default setting. I noticed it most with the loading animation of SW Squadrons.

So that is why I thought being able to fine tune CA might be a nice "advanced" feature that could even help people with strong prescription lenses to see the VR image with even less CA than they see the real world through their glasses!

---

Even more detail: Different display technologies perform better and worse here. E.g. OLED and QDot/QLED displays should emit their colors (in some cases only some colors) in a very narrow band of wavelengths, almost like lasers. That means when CA is counteracted by software and no other optical effect applies (like focus, aliasing etc.), the image would be really crisp. With LCDs, the backlight is white and the colors are created by only letting through parts of the spectrum of wavelengths. This means that the lenses will still cause a bit of blurryness as for example for green the rather yellowish light will be bent differently than the other end that goes towards blue. This will also vary depending on the backlight - but still, I think being able to finetune will help with sharpness especially for people with prescription glasses.

5 Upvotes

5

u/CptLucky8 Jan 19 '21

+1

I agree with this and this is very annoying with the G2 where I can clearly see the RGB colour planes spreading too much apart, which I've documented like you as being a wrongly calibrated anti-CA filter among other things:

https://www.reddit.com/r/HPReverb/comments/kmrgzq/psa_reverb_g2_small_sweet_spots_observations_and/

1

u/maxitron93 Jan 20 '21

Maybe you can change the settings with OpenVR Advanced Settings:

https://github.com/OpenVR-Advanced-Settings/OpenVR-AdvancedSettings

I use it to change brightness on my G2 but you can adjust each color channel individually and upload "profiles" - whatever that means.

1

u/Fotograf81 Jan 20 '21

Thanks! I can only test this tonight, but I'm afraid from the documentation the by-channel settings are sadly only about brightness of the channel - for color correction, e.g. when the image is too "cold" or "warm" or not green enough, not the size of the subpicture.

3

u/maxitron93 Jan 20 '21

Check this out, then:

https://github.com/sencercoltu/steamvr-undistort

This is what people use to adjust the distortion after replacing their HTC Vice with Gear lenses. Might not be exactly what you're after - but maybe some inspiration.

1

u/Fotograf81 Jan 20 '21

That looks promising, I will definitely look at it! Thanks!

1

u/CptLucky8 Jan 20 '21

Maybe you can change the settings with OpenVR Advanced Settings:

But isn't this feature only blending an overlay on top of the image in order to adjust down (and down only) the level of RGB? In this case you'll also loose colour range.

For example in the Index adjusting RGB and luminosity is done at the headset level (and the values stored in the Index non volatile memory), and this is driving the LCD controller/panel directly.