gonetz / GLideN64

A new generation, open-source graphics plugin for N64 emulators.
Other
771 stars 179 forks source link

Should non-integer resolutions be disabled/removed? #1216

Closed AmbientMalice closed 7 years ago

AmbientMalice commented 7 years ago

Maybe GLideN64 should default to 1x native, and the current default of matching the screen resolution should be removed. It causes a lot of problems with texture alignment, and also a 1x native default would reflect how most emulators handle it. (PPSSPP, Dolphin, PCSX2, etc.)

gonetz commented 7 years ago

What is non-integer resolution?

AmbientMalice commented 7 years ago

Resolutions like 800x600. 640x480 is an integer scale of 320x240. You know how you introduced multiples of native resolutions? The plugin currently defaults to using the screen resolution. This causes texture alignment issues and stuff like that, and it's generally less accurate. Other emulators default to 1x native and let you adjust it 2x, 3x, 4,x and so on. I think it would be better to remove the ability to have resolutions that aren't multiples of native, since that causes problems.

gonetz commented 7 years ago

Any resolution above 1x causes texture misalignment. 800x600 can be 2x of 400x300, which is valid N64 resolution.

AmbientMalice commented 7 years ago

800x600 can be 2x of 400x300, which is valid N64 resolution.

True, but wouldn't it be better if games were internally rendering at consistent multiples of N64 native resolution, instead of just whatever random resolution the user has their screen set to? Most emulators default to 1x native. But since Jabo's plugin, it seems like most N64 emulators decided to base their internal resolution on display resolution. Which is inherently going to cause problems.

To put it another way, if GLideN64 defaults to 1x, games like Mario Kart 64 and Quest 64 will look correct "out of the box". If people want to raise the internal multiplier, that's their choice. Dolphin defaults to 1x, and raising it breaks some games. 2x doesn't cause as many issues as 3x in GLideN64, for example.

gonetz commented 7 years ago

Dolphin defaults to 1x corresponds to 640x480, which is quite acceptable. 640x480 is default for GLideN64 too. 320x240 is too low and inacceptable for most of users.

Please remind me, where 960x640 looks more correct than 800x600?

AmbientMalice commented 7 years ago

Dolphin defaults to 1x corresponds to 640x480, which is quite acceptable. 640x480 is default for GLideN64 too. 320x240 is too low and inacceptable for most of users.

Can't they just raise the internal resolution, though? Like, they boot the game, and it will be "safe", but native. If they want higher resolutions, they raise the multiplier.

In its current state, lots of people boot games like Wonder Project J2 or Evangelion or Mario Kart 64, and complain that there is 2D misalignment. If you boot Quest 64 "out of the box", it will have buggy text. If the native was 1x, the game would look basically perfect. It's just my opinion, again, but if people are unhappy with 1x native, they can simply push the slider across. There can be a warning that it may break things. Currently, GLideN64 looks far more broken than it actually is.

People can use the "high resolution" modes of certain games to boost the resolution to 480x360, which is quite a bit higher. And it should still look accurate, I think. Any misalignment-prone 2D screens should be rendered at a fixed resolution.

I feel that GLideN64 should default to "safe and native", and people can increase the internal resolution. It will break things, but that's the tradeoff. In its current state, a number of games are bugged, and if people want to fix them, they'll have to use 1x native anyway. This is just my opinion, though.

Please remind me, where 960x640 looks more correct than 800x600?

I apologise. You may be right. I'd have to test more, but anything above 2x does seem to break more things regardless of whether it is native integer ratio or not.

gonetz commented 7 years ago

It is matter of taste. What do you prefer: correct but ugly or nice but someplace incorrect. If you prefer "correct " - software plugin is your best friend. It will do everything as you like, pixel accurately. I'm sure that most of users, who use hardware graphics plugins, select them to get nice picture. Suppose, we set native res as default. User downloads new version, selects full screen resolution, runs his favorite game:

Of course, this is just my opinion.

AmbientMalice commented 7 years ago

@gonetz The problem, Gonetz, is so many games are broken above native resolution. This isn't some isolated incident. It's a widespread problem. You're the boss of course, and I won't push the point like some whiny asshole, but here's a suggestion:

Remove "off" setting. Make 2x the default. It will break quite a few games, but it won't break as many. For example, stuff with horizontal lines should be fine. Vertical lines will still be an issue. The picture quality will be fairly decent. It won't solve the problem completely, but it would be a decent compromise. You could even add a little bit of text saying "Resolution above 1x may cause side effects."

That's just my suggestion. I just don't like the idea of people bashing the plugin because they don't understand why games break above native resolution.

Also, you should probably disable the black lines and native texrects fixes when running at native resolution, unless you're doing that already.

Or here is another idea. Why not add a setting where "2D" games can be forced to 1x resolution in the ini file? (z64gl did this.) 2D N64 games basically always look best at native resolution. They were designed that way. Games like Wonder Project J2 have weird texture problems above 1x. It looks weird, and people always come and complain. Stuff like Mischief Makers is another example. Characters don't really blend properly with their backgrounds above 1x. I know you hate adding extra settings due to bloat, but I think the end result would be less complaints and most people aren't gonna notice because the game assets are all designed for 320x240. They're not like 3D games where the difference is hugely apparent.

loganmc10 commented 7 years ago

GLupeN64 defaults to 320x240 and allows users to scale by that factor, so:

320x240|640x480|960x720|1280x960|1600x1200|1920x1440

I haven't heard any complaints, as long as it's easy for people to increase the resolution most people will be fine with a smaller default.

AmbientMalice commented 7 years ago

@loganmc10 How come you use multiples of 320x240 instead of multiples of "native"? Is it just easier?

loganmc10 commented 7 years ago

I would love to do multiples of native. I'm not aware of an easy way to figure out the game's native resolution, is there one?

AmbientMalice commented 7 years ago

I would love to do multiples of native. I'm not aware of an easy way to figure out the game's native resolution, is there one?

I'm pretty GLideN64's resolution scaler just multiplies the framebuffer size and then resizes it to fit into the output window. That's not quite how the N64 works, but it's close enough. Have you tried the "1x, 2x, 3x, etc, scaler?

loganmc10 commented 7 years ago

You still need to pick a display resolution (m_width and m_height I think are the variable names). And that Framebuffer scaling only works when framebuffer emulation is enabled.

I guess I could look at how it figures out the framebuffer size and use that number as my 1x resolution

AmbientMalice commented 7 years ago

Framebuffer scaling only works when framebuffer emulation is enabled.

Does GLupen64 not emulate the framebuffer? A large number of N64 games break pretty badly without it.

loganmc10 commented 7 years ago

It's enabled by default but it can be disabled, so you can't count on it for resolution picking

gonetz commented 7 years ago

I just want to remind that you may set any window size for any scale: game is rendered to selected scale, then buffer is scaled up or down to window size.

I don't like the idea to always use only "integer resolutions". I myself never use that option and I want to get users freedom to decide. Make 2x the default? Well, may be.

Why not add a setting where "2D" games can be forced to 1x resolution in the ini file?

Not a bad idea. You may force 1x in the custom ini.

I would love to do multiples of native. I'm not aware of an easy way to figure out the game's native resolution, is there one?

Nope. Besides, many games constantly change resolution.

gonetz commented 7 years ago

Also, you should probably disable the black lines and native texrects fixes when running at native resolution, unless you're doing that already.

Yep, always forget to check, did I or not :) Thanks for reminder.

AmbientMalice commented 7 years ago

Nope. Besides, many games constantly change resolution.

But when I switch between 1x native...

gliden64_rocketrobotonwheels_000

and 2x native...

gliden64_rocketrobotonwheels_002

The screenshot resolution goes from 320x240 to 640x480.

When I screenshot Turok 3 at 1x while running in low resolution mode, the screenshot is 284x222

gliden64_turok_3 _shadow_of_o_001

When I do the same at High Resolution, the screenshot is 480x360.

gliden64_turok_3 _shadow_of_o_002

This is the "native" resolution of the games. Isn't GLideN64 simply scaling these framebuffers to the display? I'm running at 1024x768. Isn't a 480x360 framebuffer being scaled via VI emulation to 1024x768 output? The plugin handles constant game resolution changes just fine.

And this behavior is how most modern emulators work. They don't render at an arbitrary screen resolution like 1024x768. They render at a multiple of the game's normal resolution and then scale it to the screen via either upsampling or downsampling.

edit:

Unless you mean that it is impossible to simulate native resolution without framebuffer emulation?

gonetz commented 7 years ago

The screenshot resolution goes from 320x240 to 640x480.

Hmm...

I'm running at 1024x768. Isn't a 480x360 framebuffer being scaled via VI emulation to 1024x768 output? The plugin handles constant game resolution changes just fine.

Yes, it works exactly that way.

And this behavior is how emulators work.

Other emulators for other systems. We already agreed that any non-native resolution may cause additional issues in case of N64. Render in 3x scale is not better than render in 800x600 or 1024x768. I prefer to run my favorite games rendered in native resolution of my monitor, without additional scaling of the image. However, the plugin has all necessary handles for people with other tastes. Why should we decide for users what is best for them? We can suggest though. Aquatakat's new GUI is specially designed to help users pick the best options.

oddMLan commented 7 years ago

Other emulators for other systems. We already agreed that any non-native resolution may cause additional issues in case of N64. Render in 3x scale is not better than render in 800x600 or 1024x768. I prefer to run my favorite games rendered in native resolution of my monitor, without additional scaling of the image. However, the plugin has all necessary handles for people with other tastes. Why should we decide for users what is best for them? We can suggest though. Aquatakat's new GUI is specially designed to help users pick the best options.

Exactamundo.

Aquatakat commented 7 years ago

@AmbientMalice

Remove "off" setting. Make 2x the default. It will break quite a few games, but it won't break as many. For example, stuff with horizontal lines should be fine. Vertical lines will still be an issue. The picture quality will be fairly decent. It won't solve the problem completely, but it would be a decent compromise. You could even add a little bit of text saying "Resolution above 1x may cause side effects." That's just my suggestion. I just don't like the idea of people bashing the plugin because they don't understand why games break above native resolution.

I think the off setting should stay - many games look spectacular when rendered in as high of a resolution as possible, especially popular ones: Super Mario 64, San Francisco Rush 2049, Perfect Dark.

Or here is another idea. Why not add a setting where "2D" games can be forced to 1x resolution in the ini file? (z64gl did this.) 2D N64 games basically always look best at native resolution. [...]

I agree. Games like Mischief Makers and The New Tetris don't take advantage of the plugin's capabilities when rendered larger than the N64 resolution.

AmbientMalice commented 7 years ago

I think the off setting should stay - many games look spectacular when rendered in as high of a resolution as possible, especially popular ones: Super Mario 64, San Francisco Rush 2049, Perfect Dark.

But if you raise the internal multiplier high enough, they look even more spectacular because you're downsampling. At least in theory. Running at your monitor's native resolution looks worse than using the multiplier due to aliasing. If people want better graphical quality, they should be adjusting the internal resolution slider just like in Dolphin and PCSX2 and PPSSPP and other emulators. PCSX2 does give you the ability to set a manual internal resolution ratio, but using it is generally unwise.

When people take fancy screenshots of games in Dolphin, they're not running the games internally at their monitor's native resolution. They're running at a multiple of native.

Aquatakat commented 7 years ago

Is that better than running a game at PC resolution with anti-aliasing?

gonetz commented 7 years ago

@AmbientMalice all you saing about Dolphin is true. Our user can get the same behaviour if he wants it, it is just one click on first config panel. I just don't see reasonable arguments why it should be default in our case. It does not bring any obvious advantages. The only exception is 1x scale, which can be named as "accurate". We can specially emphasize it in GUI "select 1x for accurate low res output".

Regarding 1x: we agreed that set 1x scale for 2D games in custom ini is a good idea.

AmbientMalice commented 7 years ago

I just don't see reasonable arguments why it should be default in our case. It does not bring any obvious advantages.

Okay. That's fair enough.

We can specially emphasize it in GUI "select 1x for accurate low res output".

I agree with this. It should probably be worded as "more accurate native N64 resolution" or something like that. And the tooltip could give a few examples of what it fixes, such as Mario Kart 64 and Quest 64.

Another concern is that anti-aliasing seems to break things in a similar manner to running above native resolution. So there could be a small warning or it could be disabled when running at 1x.

Essentially, all I want is for the emulator to be easy to understand. I don't want people getting confused because games are rendering wrong and attacking the plugin.

Aquatakat commented 7 years ago

I think we could add a checkbox that says "Render at N64 resolution" on the Emulation tab that modifies the Video tab slider.

AmbientMalice commented 7 years ago

I think we could add a checkbox that says "Render at N64 resolution" on the Emulation tab that modifies the Video tab slider.

Also a good idea. And it could grey out the slider.

gonetz commented 7 years ago

@Aquatakat Looks like a good solution. Video tab slider also shout set that check box enabled, when set to 1x. Plus some explanations for that checkbox, mentioned by @AmbientMalice

gonetz commented 7 years ago

Video tab slider also shout set that check box enabled, when set to 1x.

Or gray out the slider.

gonetz commented 7 years ago

@AmbientMalice Please copy your suggestions for GUI improvments into this branch: #1213 New layout is pretty much done.

gonetz commented 7 years ago

Should non-integer resolutions be disabled/removed?

It should not be removed at this moment.