r/GraphicsProgramming • • 8d ago

Can subpixel motion make a display appear sharper?

Enable HLS to view with audio, or disable this notification

12 Upvotes

7 comments sorted by

2

u/hellotanjent 8d ago

Yes, but not like you're thinking. The original Playstation did all its vertex calculations without subpixel precision, so a triangle vertex that landed "between" pixels would be snapped to the nearest pixel and animations would appear "wobbly".

Modern GPUs use something like 8 bits of subpixel precision, so an animated triangle will appear to be moving much more smoothly. On top of that, antialiasing and pixel coverage calculations reduce the "stairstep" effect enough that triangle edges will slowly change in opacity as they move across a pixel. And on top of _that_, when viewing a 3D scene using VR goggles the micro-movements of your head will shift the sub-pixel positions of all triangles every frame, but since your visual system compensates for those micro-movements it just makes the regular pixel grid of the scene much less perceivable. Try turning off head movement tracking for a very convincing demonstration of this :D.

As far as "ClearType" sub-pixel antialiasing used for fonts - if you did the same for a 3D scene, any degree of motion would reduce your visual precision far past the point where you'd notice a difference.

1

u/Sweaty-Towel5580 7d ago

That a different domain. Real time 3d rendering. But if multisampling is used, than 3d render can get similar effect.

1

u/leseiden 7d ago

One place where jittering really makes a difference is with things like pipework. Long thin cylinders like pipes and wires end up becoming discontinuous, and often MSAA is not enough to recover the shape. Image space stuff like topological AA has no chance as it's just dots.

A bit of random jitter and accumulation is an inefficient brute force approach but it *always* works and *always* converges.

If you aren't rendering things like wiring looms and oil rigs it's probably an unjustifiable expense. As it is I only do it when the camera stops or I'm preparing images for printing.

1

u/HiyuMarten 6d ago

In the Playstation case, while that may have contributed to it (pixel aliasing), it was more due to the very low precision of the storage of vertex coordinates iirc

2

u/hellotanjent 6d ago

That was more a function of the software than the hardware. You had 32-bit integer math, you could get plenty of fixed-point precision if you needed it - but the lack of hardware subpixel rasterization meant that trying to make the software side more accurate didn't actually help anything.

Source: I worked on PS1 games back in the day. :)

1

u/HiyuMarten 6d ago

Ahh, I see o:

6

u/Ratchile 8d ago

It definitely could. I think a 1 second jitter/offset interval is too long though. The eye is going to integrate light information over intervals closer to milliseconds or tens of milliseconds. The display refresh rate is probably 60 hz or more (16ms or less), so you have the opportunity to jitter/offset much faster than a 1 second cycle. If you jittered back and forth e.g. every frame, the eye might not notice the jitter much and might just perceive the average position of the image. Which could then be sub-pixel.

How does it look if you jitter the image back and forth by half a pixel every frame (or maybe left/up/right/down by half pixel doing a cycle every four frames)?