WEBVTT

00:00:00.000 --> 00:00:03.820
You're digging through some old moving boxes you never unpacked, and you discover your

00:00:03.820 --> 00:00:08.140
old console with a bunch of retro games. Ah, nostalgia.

00:00:08.140 --> 00:00:12.860
You dust it off, and after managing to hook it up to your shiny 4K flat screen TV, you

00:00:12.860 --> 00:00:19.300
find that it looksâ¦ well, did Link always look so blurry?

00:00:19.300 --> 00:00:25.860
Part of the problem is that old consoles like the SNES had a resolution of just 256x224 pixels,

00:00:25.860 --> 00:00:31.660
compared to the 3840x2160 pixels of a modern 4K TV.

00:00:31.660 --> 00:00:36.780
That means that if your TV were to show the game at its true native resolution, it would

00:00:36.780 --> 00:00:42.460
be this tiny. And you'd have to get so close to the screen, you'd go cross-eyed.

00:00:42.460 --> 00:00:47.840
So instead, a television will take that small media and upscale it so that it fills up most,

00:00:47.840 --> 00:00:58.180
if not all, of the available pixels. To do this, the TV manufacturer had to choose just one of several different upscaling algorithms.

00:00:58.180 --> 00:01:04.020
The most common ones are nearest neighbor, bilinear, bicubic, and landshaws, with nearest

00:01:04.020 --> 00:01:08.820
neighbor being the simplest and fastest to process, and landshaws being the slowest

00:01:08.820 --> 00:01:16.940
and most complex. However, on modern day hardware, any of these algorithms can easily upscale an image in

00:01:16.940 --> 00:01:24.340
real time, which for this video, I am defining as 16 milliseconds or less.

00:01:24.340 --> 00:01:29.660
And that's because if you're playing a game at 60 frames per second, each individual frame

00:01:29.660 --> 00:01:33.340
will appear on screen for about 16 milliseconds.

00:01:33.340 --> 00:01:39.820
Therefore, each of these algorithms should work faster than that, which also means that

00:01:39.820 --> 00:01:43.460
buffering multiple frames is not necessary.

00:01:43.500 --> 00:01:50.820
However, for AI or smart image upscaling, a multi-frame buffer can be necessary, which

00:01:50.820 --> 00:01:57.300
will result in a delay, or input lag, of much more than 16 milliseconds.

00:01:57.300 --> 00:02:00.860
So check out this video for more information about all that.

00:02:00.860 --> 00:02:08.380
But back to the topic at hand. Assuming that each of these algorithms can work in real time, which one actually looks

00:02:08.380 --> 00:02:12.660
the best? Well, see for yourself.

00:02:12.660 --> 00:02:19.500
And immediately you can see that only nearest neighbor can deliver the perfect, sharp pixels

00:02:19.500 --> 00:02:27.820
that make pixel art look good. All the others just kind of blend the pixels together, which blurs the image.

00:02:27.820 --> 00:02:34.860
So the upscaling algorithm on your TV is probably some form of bicubic or landshaws.

00:02:34.860 --> 00:02:40.900
Raising the question, why would anyone want an upscaling algorithm that's more complicated,

00:02:40.900 --> 00:02:44.220
slower, and looks worse?

00:02:44.220 --> 00:02:50.140
Because while nearest neighbor scaling looks great for pixel art, it does not look good

00:02:50.140 --> 00:02:57.580
for most other images. Your TV doesn't know that you've plugged in a retro game console, as opposed to a DVD

00:02:57.580 --> 00:03:05.420
player or something. And for live action video, bicubic or landshaws scaling really are better choices.

00:03:05.420 --> 00:03:13.100
The real world is not made of pixels. And so when we upscale a photograph, the results should not look pixelated.

00:03:13.100 --> 00:03:16.300
2D Mario is made of pixels.

00:03:16.300 --> 00:03:21.020
And therefore, when we upscale him, the results should be pixelated.

00:03:21.020 --> 00:03:25.500
But wait, I hear you say, my TV already has a game mode setting.

00:03:25.500 --> 00:03:33.980
Why doesn't it just use nearest neighbor for that? Well, because most 3D games also look better with bicubic or landshaws scaling.

00:03:33.980 --> 00:03:39.940
So the manufacturer would have to include a nearest neighbor menu option, which doesn't

00:03:39.940 --> 00:03:46.100
sound so hard. As for why they don't do that, I don't know.

00:03:46.100 --> 00:03:50.060
TV manufacturers just don't care, I guess.

00:03:50.060 --> 00:03:53.860
Maybe because not enough consumers know or care about this problem.

00:03:53.860 --> 00:03:57.780
But if you really want those sharp pixels, I have good news.

00:03:57.780 --> 00:04:04.140
There are a lot of options, like the RetroTink 2X, Framemeister or open source scan converter.

00:04:04.140 --> 00:04:10.260
But before you buy anything, I recommend you check out this great RGB video explainer series

00:04:10.260 --> 00:04:14.620
from MyLife in gaming, because this stuff can get really complicated.

00:04:14.620 --> 00:04:20.980
I ended up just buying a $14 component cable for my Wii, which provides much better quality

00:04:20.980 --> 00:04:27.580
than the stock composite cable. And it's not perfect, but you know what, it's good enough for me.

00:04:27.580 --> 00:04:32.340
Now if you're emulating your old games, you have way more options.

00:04:32.340 --> 00:04:37.420
Emulators like RetroArch have access to an arguably even better scaling method called

00:04:37.420 --> 00:04:43.260
Sharp Bilinear, which uses nearest neighbor for pre-scaling to the closest integer and

00:04:43.260 --> 00:04:46.760
then uses bilinear scaling for the remainder.

00:04:46.760 --> 00:04:52.860
This method even allows you to rotate the image without getting any jagged edges.

00:04:52.860 --> 00:04:57.540
There are also tons of other interesting scalers and shaders that can be mixed and customized

00:04:57.740 --> 00:05:04.300
to get just the look you want. And blurry pixel art is not just a problem for retro gamers.

00:05:04.300 --> 00:05:09.700
If you're a digital artist like me, you should know that programs like GIMP, Photoshop and

00:05:09.700 --> 00:05:15.420
After Effects do have support for nearest neighbor if you know where to look.

00:05:15.420 --> 00:05:21.140
But some creative software, including Premiere, does not.

00:05:21.140 --> 00:05:27.540
It's annoying. Also, support for integer scaling from PC hardware manufacturers like AMD, NVIDIA and

00:05:27.540 --> 00:05:33.500
Intel has been getting better lately, but we've still got a ways to go.

00:05:33.500 --> 00:05:38.140
If you want to learn more and get involved in the Sharp Pixel Revolution, Merritt Tenenlin's

00:05:38.140 --> 00:05:42.540
website, which I used as a resource for this video, is a great place to start.

00:05:42.540 --> 00:05:47.180
He's even developed a browser plugin that solves a similar problem with improperly scaled

00:05:47.180 --> 00:05:54.140
images on websites. And I use it every day when taking important screenshots for TechWiki videos like this one.

00:05:54.140 --> 00:06:00.820
Never mind that. Thanks for watching. Like, dislike and check out our other video about how to buy a TV for gaming.

00:06:00.820 --> 00:06:04.580
Leave a comment with your video suggestions and subscribe for more TechWiki.
