• Hey, guest user. Hope you're enjoying NeoGAF! Have you considered registering for an account? Come join us and add your take to the daily discourse.

Best NES, SNES and GBA Emulators

byuu

Member
Last time i checked, accuracy profile would improve one game, Air Strike Patrol's shadow. Other than that the balanced profile would be the same. Has this changed lately?

Not in ways you'd be likely to notice. Some very recent findings were:

* the horizontal scroll latch behavior was wrong, and caused stuttering on the Pacman (PD) title screen.

* hires and interlace mosaic was wrong, which I think was only used briefly in Tokimeki Memorial and in a way that you really wouldn't notice it was wrong.

There've also been CPU DMA improvements, better randomization approximation for some issues with games that don't pre-initialize RAM before using it, etc. Yeah, we're still improving SNES emulation in 2017.

These kinds of things could be backported, but I had to drop my balanced profile because it was just too much work to have three SNES emulators on top of seven other system emulators.

Is this something that would be hard to set up as just a config value? i.e. report 240 vs 480 resolution to the libretro API?

No idea.

Retroarch is simply not user friendly at all

Well, regardless, it's clear a whole lot of people here use it. It's not ideal for them to use very old code, and it's bad of me to go around complaining about that, so I'm happy we can work together and get this resolved finally.

Plus the 480p framebuffer shader issue, at least until that gets fixed on RetroArch's end.

Being fair, higan hasn't fixed this either. I'm less optimistic they'll be willing to make a libretro API change for this, but I guess we'll see how things go.

I honestly don't know shit about programming or shaders, but I imagine when you double the amount of pixels to work with, especially in one direction, it's going to make the image look very different and probably be distracting in normal play.

That's basically exactly it. Only minor addition I have is, the image you showed had the entire screen at 512x224. The textboxes in-game only have part of the screen in hires. So yeah, it's an absolutely unbelievable undertaking to split the image into region sections, filter each through separate shaders, and then fuse them back together, trying to avoid nasty seams.

The issue as described earlier is that higan would report every game to the libretro wrapper as running in the full high resolution

Technically, that is true.

higan's always been idealistic over pragmatic. The SNES can actually change between the lores (256-width) and hires (512-width) modes in the middle of a scanline, not even just between scanlines. This has been confirmed with a tech demo ROM.

I always have to render the screen at the full 512-width because of this, even though no commercial game ever tries this. But my goal is 100% accuracy no matter what.

It would be possible to track the hires state the entire frame, and if it has ever been enabled during the active display, output the display width as 512, and otherwise, crush the video by dropping every other pixel and output it as 256 width.

My solution may end up like that, or it may end up simply informing the shaders of the perceived virtual resolution for the frame.

It gets a lot tricker on the PC Engine, where there are three video modes you can change at any time during display.
 

Neith

Banned
If you combine it with Bilateral filter you obtain some interesting effect on snes games:

https://imgur.com/a/GWkaX
https://imgur.com/a/yRMqi

Okay, this comparison is whack. This filter is SUPER strong. I blended the SMB-SMW screen so the highlights would almost look 3D in their gradients. But this basically murders details in level backgrounds. Yoshi's Island looks like crap. Gonna have to play with this bilateral thing and do a conservative setting. Here was the comparison I did:

https://imgur.com/a/fbaIY

On a side note I have been using ScaleFX threshold at 50 or 66 in screenshots. I notice that in Yoshi's Island Mario starts losing certain distinct pixel parts at about 20. So that is what I think I will be using. It still gives huge benefits, but the image is more faithful to the original.

Bilateral I am not really sure can actually work for games. Maybe on a super low setting I guess, but it's barely seeable at that point. I will try to tweak that into the mix to see if it works without destroying detail.
 

Paragon

Member
Well I don't know if there's an official way to do it, or if it's easy to implement, but the Genesis Plus GX core can change resolution on the fly.
Here's an example from Castlevania: Bloodlines which uses different resolutions for the menus and for gameplay.
If you set RetroArch's aspect ratio to 1:1 PAR, the image size changes:

bloodlines-title5us0h.png
bloodlines-game8as02.png
I don't think that any of the other cores do this, which is a bit frustrating.
For PSX games, that means having to pick a resolution which is both divisible by 256px and 320px to cover the majority of games if you want integer scaling.
That's partly what motivated me to start using pixellate and specifying the aspect ratio via per-game overrides rather than letting the cores handle it, instead of being concerned about integer scaling.

Sup color buddy.
Funny you mention gamma as it wasn't formally standardized until ITU-R Rec. BT.1886, which came out 2011 (?!). Prior to that, everybody and their brother, both in the video game industry and film/TV worlds, used a Sony PVM/BVM as "the" standard, which is what we know as "gamma" today. The BT.1886 standard itself is a clone of the classic Sony PVM CRT EOTF with a slight tweak at the bottom end to better handle crushed blacks on LCDs.
BT.1886 basically says to calibrate your display to 2.40 gamma if it has a contrast greater than 10,000:1, while also specifying a more complex EOTF for applications where matching a CRT response exactly is required - thought that's generally not recommended.
The EBU still maintain that 2.35 gamma is the most accurate 'simple' representation of CRT gamma, but conceded the point.

On older video game systems like the NES and virtually all CRT arcade games, you have the Japanese 9300K white point issue. Classic Japanese TV used a 9300K white point instead of the now-standard 6500K, aka D65, supposedly as it made fair skin tones look better back in the day (some Japanese TV stations still intentionally calibrate to D93 last I heard). This little tidbit seems almost completely unknown in the West and why the colors of many classic games look a bit "off" on modern displays, even if you're using original game hardware and a CRT.
9300K always seemed like a bit of a myth. It is a standard, but the last time I looked into it, no-one could produce any sources which actually confirmed it ever being used in production.
9300K is so blue that it doesn't make a lot of sense to use that as the display's white point.

The NES was seemingly calibrated to D93, contrary to what many emulator authors seem to think, and I think the SNES might be too, but not sure. Good luck finding info on this, even in places like AVS Forum. I wonder how many emulators will eventually get a decent 3D LUT implementation for D93->D65 conversion. Supposedly even US-spec Sony Trinitron and Mitsubishi TVs shipped calibrated to D93, which would explain why there's controversy over the color of the SMB1 blue sky (when the correct answer is a Sony Trinitron calibrated to D93). D93 is apparently "official" as it (still?) shows up as an allowable technical footnote in BT.470.
Without actually having access to this hardware, I'd be hesitant to believe that.
There are so many NES palettes which claim to be "the correct one", that it really just seems like preference. In theory, I believe it should be possible to produce a mathematically correct palette, but it would take someone smarter than me to do it.
 

Hyllian

Member
Bilateral I am not really sure can actually work for games. Maybe on a super low setting I guess, but it's barely seeable at that point. I will try to tweak that into the mix to see if it works without destroying detail.
I'm not using his bilateral filter, but mine (fast-bilateral). And you should put bilateral after the scalefx, not before. The effect is better this way, though slower. To control what bilateral does, you should tweak its space and range params. The space param controls the radius of the kernel filter. The range param controls the max color gradient the mask will affect (this preserves edges).

And, if you don't wanna melt pixels, you should avoid bilateral, because it uses gaussian filtering to smooth low gradient regions. It's a graphical style and if you're looking for faithfull single pixels, go to crt or retro folders instead.

BTW, can you try this preset (there are a cgp and a glslp): https://ufile.io/temd7
Just put it at the same folder of scalefx.cgp or scalefx.glslp. It's a combination of crt and scalefx (best of both worlds).
 

Neith

Banned
I'm not using his bilateral filter, but mine (fast-bilateral). And you should put bilateral after the scalefx, not before. The effect is better this way, though slower. To control what bilateral does, you should tweak its space and range params. The space param controls the radius of the kernel filter. The range param controls the max color gradient the mask will affect (this preserves edges).

And, if you don't wanna melt pixels, you should avoid bilateral, because it uses gaussian filtering to smooth low gradient regions. It's a graphical style and if you're looking for faithfull single pixels, go to crt or retro folders instead.

BTW, can you try this preset (there are a cgp and a glslp): https://ufile.io/temd7
Just put it at the same folder of scalefx.cgp or scalefx.glslp. It's a combination of crt and scalefx (best of both worlds).

I did put it after ScaleFX. In effect, I can't use bilateral because it kills too much detail. I think it is obvious from my posts I am looking for a filter that keeps detail and only modernizes the game. ScaleFX is this filter for some games. Bilteral actively kills detail and leaves the game looking like a blurry mess for the most part. On lower levels it does basically nothing in my experience. I spent over an hour messing with it last night.

In Yoshi's Island I really dislike all the jagged lines and wavy patterns that are not resolved by other methods, but what I cannot do is the actual smoothing of detail to the point it no longer resembles anything. ScaleFX actively keeps almost all the detail while rounding just the right amount of edges and corners. At low values ScaleFX is fucking amazing on certain games to be honest.

I tried every setting in the bilateral shader. At lower values it simply didn't really do much except blur small details. It definitely did not blend well at low levels. I'm gonna play with it a bit more, but it quickly starts to kill the detail in stages and destroys the coloring book look of YI very fast.

I even toned down ScaleFX to only 20 on threshold, when I was using 50 and 66, because it was destroying details.

At 20 it's about perfect and all I really need for games I think. My whole point was to bring YI closer to the concept art, closer to the vision without the limitations of the console, and so far ScaleFX does that the best out of any filter I have tried.

I will definitely try your CRT ScaleFX filter on a couple games. I dislike CRT filter on cartoony games because I think it interferes with the artistic nature of the drawings too much. I like GEOM, but it's very heavy and only works in certain games for me.

Maybe this filter will work for a couple of action games and shmups I have in mind. Thanks.
 

Neith

Banned
Hey guys, can someone please give a summary about the downsampling thing, and what it will bring to games. I was wondering about aspect ratio as well in Retroarch.

Should I be putting my games in 8:7 just for BSNES? And what about for other systems? Am I supposed to let the core do it?
 

Paragon

Member
Should I be putting my games in 8:7 just for BSNES? And what about for other systems? Am I supposed to let the core do it?
I would generally set the aspect ratio to 4:3, enable the pixellate shader with the "linear gamma weight" option enabled - it's in the "retro" section, and use non-integer scaling so that it fills as much of the screen as possible.
I would only select 1:1 PAR if the game looks wrong in 4:3. Most games seem to be drawn for 4:3 in my experience - after all, CRTs were all 4:3 back then.
For SNES games, integer scaling really only works if you have a 1440p (or 5K/8K) display, where 7x6 scaling gives you a pixel-perfect 4:3 image that mostly fills the screen.
 

Neith

Banned
I would generally set the aspect ratio to 4:3, enable the pixellate shader with the "linear gamma weight" option enabled - it's in the "retro" section, and use non-integer scaling so that it fills as much of the screen as possible.
I would only select 1:1 PAR if the game looks wrong in 4:3. Most games seem to be drawn for 4:3 in my experience - after all, CRTs were all 4:3 back then.
For SNES games, integer scaling really only works if you have a 1440p (or 5K/8K) display, where 7x6 scaling gives you a pixel-perfect 4:3 image that mostly fills the screen.

At any rate 8:7 is an option in the aspect ratio menu so I might as well just use that no? Or is this still technically wrong?

https://www.videogameperfection.com/forums/topic/43-87-aspect-ratio-correction-for-snes/

User post on this issue:

"I wanted to set the record straight about aspect correction on the SNES for the OP: The examples you posted are as you know, games where the artists either could not or forgot to account for aspect correction. So those perfect circles were never perfect back when they were displayed on the current technology of the times. This is mostly due to memory constraints. Tiles were square because memory is stored that way (i.e. 8×8, 16×16).

However, there are several games where the artists did take into account aspect correction. Take the Magus Tower in Chrono Trigger for example. The intro scene that pans down the top of the tower with the moon in the background very CLEARLY was designed for aspect correction. So if you play this game at 1:1 square pixels, you're just playing it wrong.

Now here comes the important part: People generally get wrong how to aspect correct the SNES. They think you take the 256×224 active area and stretch that to a 4:3 image. That's not how it works. Instead, a formula is devised based on the pixel clock rate. In the case of the NES, SNES, and Genesis's 256×224 mode, the formula is 256 * 8/7, which equals about 293×224 for proper aspect correction. When scaling, the most accurate approach is to scale first and then apply the formula. So 2x scale would be (256 * 2) * (8/7) = 585×448 and 3x scale would be (256 * 3) * (8/7) = 878×672 and so on. Of course it's better to use multiples of 2 when it comes to digital displays, so for 1x scale: 292×224, and 2x scale: 584×448.

But yeah, just wanted to set the record straight that while you may prefer the perfect circles in the handful of games that didn't account for AR, it's still technically wrong, and is merely a novelty to see square pixels in this regard."

Maybe this is why mario and co look weird at 8:7 sometimes? So I just stick with normal then?
 
I use 8:7 because non uniform pixel sizes look awful on a fixed resolution lcd when the screen scrolls. If there are elements that really stand out as looking wrong then i will switch to 4:3.
 

Paragon

Member
At any rate 8:7 is an option in the aspect ratio menu so I might as well just use that no? Or is this still technically wrong?
The 1:1 PAR option (not 1:1) matches the system's internal resolution, while 8:7 is only correct for SNES games.

Now here comes the important part: People generally get wrong how to aspect correct the SNES. They think you take the 256×224 active area and stretch that to a 4:3 image. That's not how it works. Instead, a formula is devised based on the pixel clock rate. In the case of the NES, SNES, and Genesis's 256×224 mode, the formula is 256 * 8/7
I'm not sure about this, but there's nothing preventing you from setting a custom 1.306122 aspect ratio in RetroArch.

Maybe this is why mario and co look weird at 8:7 sometimes? So I just stick with normal then?
I just pick whatever looks right for the game overall - whether that's 1:1 PAR or 4:3.
Not all sprites seem to be drawn to the same aspect ratio in every game, so even if it makes some circles appear oval, a game may look more 'correct' overall in 4:3.

I use 8:7 because non uniform pixel sizes look awful on a fixed resolution lcd when the screen scrolls. If there are elements that really stand out as looking wrong then i will switch to 4:3.
If you're using integer scaling; e.g. 256x224 to 1792x1344, that's not a problem.
For non-integer scaling, that's what the pixellate shader fixes.
 

TaurezAG

Member
So I decided to give ScaleFX a go. I still prefer my (no longer looks like a CRT)custom CRT-Royale shader. ScaleFX is pretty impressive though, and I can understand why someone would prefer it.

Unfiltered
eQ4KZb.png


ScaleFX
kpr10s.png


CRT filter
Jf2u6N.png
 

Neith

Banned
So I decided to give ScaleFX a go. I still prefer my (no longer looks like a CRT)custom CRT-Royale shader. ScaleFX is pretty impressive though, and I can understand why someone would prefer it.

You definitely do not have ScaleFX working in that shot correctly. What did you set the threshold on? That looks like the filter is either something else or you basically have the filter off.

Yoshi's chest and other lines look terrible in that one. They should all be smooth. Minimum of at least 10 on the threshold and at least 20 IMO. 20 is where all the edges become decent and you get the most detail on Mario and Yoshi.

ScaleFX conservative setting: https://imgur.com/a/thkkq

Looks so damn good with YI. Timeless game and graphics with that filter.
 

Paragon

Member
So I decided to give ScaleFX a go. I still prefer my (no longer looks like a CRT)custom CRT-Royale shader. ScaleFX is pretty impressive though, and I can understand why someone would prefer it.
You need to use a ‘Balanced’ bSNES core rather than an ‘Accuracy’ core for it to work as intended.
 

Neith

Banned
You need to use a ‘Balanced' bSNES core rather than an ‘Accuracy' core for it to work as intended.

Yeah, that must have been his problem. The only major artifact I can see with ScaleFX on 20 is in the eye of mario where that one weird nose pixel cannot be accurately conveyed and connects to his eye. Small price to pay for the overall beauty though.

Little mario is actually rather poorly done IMHO. I don't know what they were thinking with his nose.
 

TaurezAG

Member
You definitely do not have ScaleFX working in that shot correctly. What did you set the threshold on? That looks like the filter is either something else or you basically have the filter off.

Yoshi's chest and other lines look terrible in that one. They should all be smooth. Minimum of at least 10 on the threshold and at least 20 IMO. 20 is where all the edges become decent and you get the most detail on Mario and Yoshi.

ScaleFX conservative setting: https://imgur.com/a/thkkq

Looks so damn good with YI. Timeless game and graphics with that filter.

You need to use a ‘Balanced’ bSNES core rather than an ‘Accuracy’ core for it to work as intended.

Thanks for the heads up, I was indeed using an accuracy core. I've updated my post with new screenshots.

Here's another where I think ScaleFX works well: Rayman SNES Prototype

Unfiltered
qim40p.png


ScaleFX
BqejZs.png


CRT Shader
1qRGqC.png
 
Three retroarch questions.

1) can someone tell me set up shaders on a per system basis instead of applying to everything?

2) what PS1 cores allow you to remove/reduce texture warping?

3) is there an NES core that can help reduce Sprite flicker?
 

Radius4

Member
Three retroarch questions.

1) can someone tell me set up shaders on a per system basis instead of applying to everything?

2) what PS1 cores allow you to remove/reduce texture warping?

3) is there an NES core that can help reduce Sprite flicker?

1. Load a shader / save core preset
2. Beetle PSX HW
3. Nestopia has an option to eliminate the maximum sprites per scaline limit
 

Neith

Banned
Thanks for the heads up, I was indeed using an accuracy core. I've updated my post with new screenshots.

Here's another where I think ScaleFX works well: Rayman SNES Prototype

Which CRT shader are you using? I really like that shot too. The ScaleFX shots look pretty good. They tend to be a little iffy in dark games with certain artstyles like that.

Going back to your Yoshi shots it is obvious ScaleFX is king there IMO. The CRT shader doesn't hold a candle to it. I wouldn't call it just the Yoshi filter though. I really like it even in Super Metroid. And of course most cartoony games benefit from it.
 

Neith

Banned
Well for the GBA I am using Easy mode CRT with a touch darker gamma. I feel like it fits about perfect with those castlevania games. ScaleFX just kind of looked not very good there.

Really happy with the shader system in Retroarch. I went through all the CRTs and honestly the default easy mode one is about perfect for my uses. It still has some parameters you can change as well. I can't do Geom as it just looks way too weird on my 42 inch. Maybe the flat version I guess, but even then I think I prefer the easy mode style. I think I tend to prefer bilinear on to take the harshness off the image.

https://imgur.com/a/D7A2F

New image with slightly toned shader for Easy. Looks really damn good to me.

I think I still prefer ScaleFX for Lunar on PS1 though. It really gives it a nice cartoony vibe, but I will have to do some more testing.
 

Josman

Member
Honestly, I've tried a lot of emulators, including Retroarch. With the criteria you put in the OP, Retroarch is what you would be looking for, as it's designed to be managed with a gamepad, and it holds all of your platform ROMs in a single program. The thing is, the user interface is just too convulted, and I had a lot of problems with compatibility, bugs, and etc. but that's because I wanted to add filters and backgrounds, If you want to keep it simple then take your day and read instructions on how to set it up, but keep it basic. Just set the shortcut on Steam, configure a controller profile por Retroarch on Steam, then launch it and set individual profiles for each Emulator core inside Retroarch.

If you want to avoid all of that hassle, just download Zsnes, or Visualboy Advance, set them to start in fullscreen, configure inputs the same way, and use a Dualshock 4 with the TouchPad acting as a mouse for browsing menus.

Edit: looks like I'm LTTP lol
 
Top Bottom