[SUG][PLAYER] Increase number of zoom increments

Started by WillLem, April 28, 2020, 01:01:54 PM

Previous topic - Next topic

0 Members and 3 Guests are viewing this topic.

WillLem

I've always thought that the jump between 1x, 2x and 3x zoom is quite massive.

If there's a way to add more increments between each step (perhaps the standard menu options could remain at 1x, 2x or 3x, but be more incremental when zooming in and out in-game), this would be fantastic. :thumbsup:

namida

#1
I could very easily make NeoLemmix accept non-integer zoom. The problem is that it won't look very nice, especially when not using the "in-game smoothing" option (which itself has a somewhat negative effect on the ability to clearly determine individual pixels). The possible ways this can be done is either by making the result blurry, or by having it so that it alternates between one pixel being zoomed to 2x, and the next staying the original size, etc. (At larger fractional zooms, say, 7.5x, this would likely be barely noticable, but it's VERY noticable at smaller zooms. Arguably, at large zooms the difference from one step to the next is small enough that that's not where this is needed.)

If you want to see what I mean - save a level image, and try zooming it to 150%. You can try both the "Bilinear" and "Nearest Neighbour" options, to see the two different approaches (and their respective problems).

If people feel this is still worth trying out, I can definitely give it a shot, but yeah - I suspect that as soon as people actually try it out, they'll be like "screw this, this looks awful" and ask for it to be removed again (as it'll simply be an extra increment to skip when zooming in/out, that doesn't actually ever get used).
My projects
2D Lemmings: NeoLemmix (engine) | Lemmings Plus Series (level packs) | Doomsday Lemmings (level pack)
3D Lemmings: Loap (engine) | L3DEdit (level / graphics editor) | L3DUtils (replay / etc utility) | Lemmings Plus 3D (level pack)
Non-Lemmings: Commander Keen: Galaxy Reimagined (a Commander Keen fangame)

WillLem

#2
Hmmm. I see what you mean...

I didn't realise that the zoom function actually resizes the output. A 150% resize isn't tooo bad in hi-res, but 125% and 175% look fairly awful. I can imagine all of these being much worse in low-res.

If it's easy enough to give it a try, maybe add it as a trial feature in the next experimental build that you do and see what the consensus is. And/or, could a 150% zoom be something that's implemented only in hi-res?

Simon

#3
Assuming non-integer zoom will look decent:

A more natural progression of zoom factors than
1x, 2x, 3x, 4x, 5x, ..., 13x, 14x, ...
would be
..., z-3x, z-2x, z-1x, 1x, zx, z2x, z3x, z4x, ...
for a constant 1 < z < 2.

Reason: Then, a single command to zoom in will always magnify by z, no matter what the old zoom level was. The absolute current zoom level shouldn't matter to determine how often we must zoom in to double the zoom.

Since integer zoom looks so nice, it's not necessary to follow powers of z exactly, and it's fine to round the powers to integers if they're relatively near. Between 1x and ~2.5x, there shouldn't be rounding because the relative rounding error would be so large; this idea matches WillLem's feature wish.

Even if non-interger zoom will not happen, consider skipping integer zoom levels such as 7x, 9x, 11x, and then skip 13x, 14x, 15x, and so on. This brings the series of integer zoom levels closer to the progression of powers.

-- Simon

WillLem

Just giving this a quick bump.

I'm still thinking that somewhere between the 1x and 2x zoom is the ideal for general play. Of course, zooming in and out of the level is often required and desirable anyway for incidental skill assignments/checking detail/etc, but for viewing the level as a whole or watching replays back, it seems that 150% might just be where it's at.

I notice it more and more when I'm filming LPs, in particular.

Is there a way to give it a trial run and see what the results are?

Is what Simon suggeested a better/more feasible way of achieving the same result?

namida

Simon's suggestion assumes non-integer zoom will look okay, and suggests improvement to how the zoom levels progress - basically that when we get to particularly high zooms, for example, we should start increasing zoom by 2 stages at a time (and then later, 4, if it goes that high). Basically comes down to that, eg, the difference between 8x, 9x; or between 9x and 10x is barely noticable, unlike the difference between say 1x, 2x and 3x. So - to use that same example, why not cut 9x out altogether (perhaps with a special case when 9x is the highest that fit's the user's screen) and have the progression go 5x, 6x, 7x(?), 8x, 10x, 12x, 14x(?), 16x, etc - the ones marked with ? might also be considered for skipping.

It doesn't make any difference, however, to how feasible non-integer zoom is in the first place.

Here's an image that illustrates the issue. (The alternative to this problem is "make it blurry", which is even worse in a NeoLemmix context.)

The original image is the result of a 1.5x zoom. This result is then further zoomed 2x, to aid visibility. One small segment is further magnified 4x.
My projects
2D Lemmings: NeoLemmix (engine) | Lemmings Plus Series (level packs) | Doomsday Lemmings (level pack)
3D Lemmings: Loap (engine) | L3DEdit (level / graphics editor) | L3DUtils (replay / etc utility) | Lemmings Plus 3D (level pack)
Non-Lemmings: Commander Keen: Galaxy Reimagined (a Commander Keen fangame)

WillLem

Is there any alternative to integer zoom? Perhaps something that doesn't actually resize the image? Not sure if that's even possible...

I've ended up setting my screen resolution to 1366 x 768: it's actually better for most of the applications I use, NeoLemmix included. I think laptop screens don't need to be as high-res as they are, especially for an OS like Microsoft which attracts and supports an enormous range of software in all kinds of different resolution sizes.

At least macOS pretty much insists on apps being in a particular resolution for them to even be compatible, which is why everything looks perfect even though the screen resolution is mahoosive.

namida

QuoteIs there any alternative to integer zoom? Perhaps something that doesn't actually resize the image? Not sure if that's even possible...

There's no way to zoom by a non-integer factor (such as 1.5x) on a digital display without some kind of distortion, simply because the screen cannot set "half a pixel" to a certain color. CRTs worked a bit differently, but modern displays are literally made up of individual pixels - and even on the older CRTs, I'm fairly sure other hardware in the chain still required everything to be done in terms of whole pixels, either directly or through simply not being powerful enough to do otherwise.

QuoteI've ended up setting my screen resolution to 1366 x 768: it's actually better for most of the applications I use, NeoLemmix included. I think laptop screens don't need to be as high-res as they are, especially for an OS like Microsoft which attracts and supports an enormous range of software in all kinds of different resolution sizes.

Then your screen will always either be blurry, or have the disproportionate pixel effect as illustrated in the image above. For the same reason as the above, it isn't physically possible to display a different resolution without this (unless it's done by adding black borders rather than by resizing - which is technically still running at the original resolution, just with part of the screen unused), with one special case: If the native resolution of the screen is an integer multiple of the resolution. For example, a 2560x1440 display could render a 1280x720 resolution image with no distortion, because it's exactly double (on both dimensions) 1280x720.

Setting your resolution to 1920x1080, then slapping on 150% OS zoom, gives you exactly the same amount of screen space, and makes everything exactly the same size (except apps that are aware of, but specifically choose to ignore, the scaling), as setting your resolution to 1280x720 with 100% zoom - but with less distortion, as the apps can make use of the higher resolution for finer detail. (1366x768 is pretty similar in practice to 1280x720, but much less nicer numbers for doing the theoretical calculations. More or less the same concept applies, except that 1366x768 displayed on a 1920x1080 screen will be even more distorted / blurry.)

Pretty much - the only time you should be running a modern display at any resolution other than its native resolution, or an integer divisor thereof, is if it's needed to squeeze out more performance from a game / app that your system can't handle running at the higher resolution. Otherwise, you sacrifice visual quality for no gain. (I will stress though that it does not, as far as I'm aware, actually damage the screen.) If you prefer actually working with a 1366x768 screen, you'll get a much nicer 1366x768 by buying a (laptop with a) screen that natively has that resolution.
My projects
2D Lemmings: NeoLemmix (engine) | Lemmings Plus Series (level packs) | Doomsday Lemmings (level pack)
3D Lemmings: Loap (engine) | L3DEdit (level / graphics editor) | L3DUtils (replay / etc utility) | Lemmings Plus 3D (level pack)
Non-Lemmings: Commander Keen: Galaxy Reimagined (a Commander Keen fangame)

ccexplore

Quote from: namida on June 13, 2020, 12:11:22 AMThen your screen will always either be blurry

To be fair, how much or little you'd notice the blurriness greatly depends on the kinds of graphics.  Zooming a hi-res photograph in non-integer zoom for example may not be so bad.  Lemmings is a little more unique in that its graphic design is decidedly not anywhere remotely photographic/photorealistic, it is in fact a specifically low-resolution pixelated design, and those are often challenging to do well with non-integer zooms.

Perhaps using the hi-res version of graphics may make non-integer zooms more acceptable?

WillLem's experience with trying a lower display resolution may be partly Window's fault.  At the lower resolution the default DPI is probably left at 1 instead of the 1.5 used for the native HD resolution.  So less applications are being zoomed by Windows for the DPI thing, and at the same time everything onscreen are all zoomed by the hardware to go from 1366 to the native HD.  Perhaps the hardware is doing a better job than Windows, plus with everything zoomed maybe you'd notice blurriness less (compared to the Windows DPI thing, where it may be more noticeable since the selected onscreen stuff that don't need zooming, like the native Windows UI elements, are crisp by comparison to the rest that are zoomed by Windows).

WillLem

#9
OK, cool. In that case mark this topic as resolved, the workaround with lowering my screen resolution is actually beneficial for quite a few things, as it turns out.

Quote from: namida on June 13, 2020, 12:11:22 AM
Then your screen will always either be blurry, or have the disproportionate pixel effect as illustrated in the image above.

Not so. Running NeoLemmix at 1366 x 768 (100%) is perfect: there are no disproportionate pixels or blurriness at all.

My screen seems to handle that resolution quite nicely generally. OK, things aren't as sharp as if I run it full res, but tbh I'd rather things were larger and easier to read than tiny and super sharp.

Also - apps are still able to make use of the higher resolution capability. For example, I can still set TRII's full-screen mode to max resolution. It just flicks the screen between the two when entering and exiting the app.

Playing with Intel Graphics CC further, I've discovered that the sweet spot is 1440 x 810: everything is nicely sized, text is easy to read, and I can enlarge emulators like Dolphin and Citra without compromising the performance.

Don't get me wrong: I love HD when it's on a nice big screen that actually benefits from the increase in resolution. But small screens just don't need that many pixels, especially when the majority of apps and programs are still built for standard definition initially.

Quote from: namida on June 13, 2020, 12:11:22 AM
Setting your resolution to 1920x1080, then slapping on 150% OS zoom, gives you exactly the same amount of screen space, and makes everything exactly the same size

Agreed: this does result in a nicer quality picture, thanks for the tip! I'll give this a try for a bit as well.

Quote from: namida on June 13, 2020, 12:11:22 AM
If you prefer actually working with a 1366x768 screen, you'll get a much nicer 1366x768 by buying a (laptop with a) screen that natively has that resolution.

Pretty much all modern machines are 1080p or higher nowadays; that's OK though, it's a trade-off for computing power. Lowering the resolution a bit seems to have helped generally, not just with the NeoLemmix zoom thing but with other things as well.

namida

QuotePretty much all modern machines are 1080p or higher nowadays. That's OK though, it's a trade-off for computing power and lowering the resolution a bit seems to have helped generally, not just with the NeoLemmix zoom thing.

In my experience, it's almost unheard of to find a standalone monitor with a resolution lower than 1920x1080 these days (other than specialized models), but 1366x768 laptop screens are still fairly common even on good models.
My projects
2D Lemmings: NeoLemmix (engine) | Lemmings Plus Series (level packs) | Doomsday Lemmings (level pack)
3D Lemmings: Loap (engine) | L3DEdit (level / graphics editor) | L3DUtils (replay / etc utility) | Lemmings Plus 3D (level pack)
Non-Lemmings: Commander Keen: Galaxy Reimagined (a Commander Keen fangame)

WillLem

Quote from: namida on June 13, 2020, 01:53:35 AM
In my experience, it's almost unheard of to find a standalone monitor with a resolution lower than 1920x1080 these days (other than specialized models), but 1366x768 laptop screens are still fairly common even on good models.

Don't get me wrong, I'm happy to have bought a laptop with a higher res screen. This way, I still have the option to run things in higher resolution, and it's definitely going to end up being more future proof as developers make apps for native HD screens.

1440 x 810 seems to be the sweet spot for now - everything looks just right. I'll test it out for a few days and make sure everything works as it should, and if so then I'm quite happy.