Hey, someone sent me a message that a discussion was going on about some of my filter work (I’m the person who wrote TV2X / TV4X), so I thought it would be a good time to clear some things up.
First of all, I saw some people saying that there are problems with it treating signal as 480i. This is not the case. That post is actually very old, and at the time, I was looking into a way to emulate 480i signal, which is used on a few games (2 player mode in Sonic, for example). The idea was to treat 240p games as 240p, but also try and simulate the phosphor refresh / decay for 480i content. That idea has since been abandoned (maybe I’ll play around with it again later, but right now I don’t have much time for side projects).
Also, the 4X code is old and unmaintained at this point. While I was implementing it on SNES9X, I ran into issues with it running really slowly, despite the filter code running very fast. I tracked that down to the upscaling that goes on inside SNES9X. Basically, there’s problems scaling 4X to screen size, and that’s where the slow down was coming from.
My initial goal behind the 4X filter, was to basically be able to simulate the look of various major phosphor layouts (slot mask, dot mask, aperture grille, etc). At some point, the my goals became a bit too ambitious (also simulating what happens to signal when it gets sent over Composite, S-Video, and Component, trying to emulate 480i content, etc), and I had to scale it back… I’m doing all of this in my spare time, in addition to working full-time as a programmer, taking care of family stuff, training for gaming tournaments, etc.
So, after all of that, I started working on a 2X filter, and its actually looking pretty good. I have a build of SNES9X for Linux built, and running well on an old Athlon 64 3200+. I was working on a Mac port, but I found out that the Mac port of SNES9X is currently unmaintained, doesn’t compile, and needs to be completely rewritten because it heavily uses deprecated APIs. Right now, I’m working on getting my hands on a Windows system, and getting it up and running in SNES9X on that. There’s a couple other things I want to play around with, such as fixing the aspect ratio on SNES games (the resolution is typically 256x224, but when you have an actual console plugged into a TV, it gets horizontally stretched so that it’s at a 4:3 aspect ratio).
On most TVs, there is quite a bit of luminance that bleeds into the black space in between scanlines. The amount of “bleed” various a lot between TVs. High quality production monitors (ie : Sony PVM and BVM) have little to no bleed, so you can see the black lines in between scanlines very clearly on them. This is actually adjustable in my 2X filter. There’s a lot of things not taken into account, though, which I would have really liked to include. I’ve actually done extensive research about how TVs and the NTSC standard work for this project, so I know there are definitely some weaknesses. 100% emulation really isn’t possible at this point. There is just too much that has to be taken into account, and you’d have to render it at something like 10-20 times the original resolution. So the best I can do is compare against my Sony Trinitron TV, which is how I’ve been checking my work thus far.
Here’s some recent screenshots of my 2X filter, from my Twitter:
And I also have all of the 2X code in the TV4X project on GitHub:
At some point, I want to make a 3X filter, and possibly play around with some shader stuff, but I only have so much spare time.