Alphultima 3: Omega/DariusG edition

This version is dedicated to DariusG! (Sometimes one’s harshest critic can help drive one to be better ha!)

This is the final version.

Some background: this is an INTERPOLATION filter. It is NOT trying to emulate a CRT.

The aim is to provide an interpolation filter that does PIXEL BLENDING. Such doesn’t exist in the current RA library of shaders or presets.

It features adjustable sharpness (thanks to the Controlled Sharpness shader!) that allows one to adjust the degree of nearest neighbour (pixelated blockiness) vs bilinear (smoothness) look of the image.

I dare say it looks like visual perfection played on a TV (using the “Smooth” version).

The following images compare mine to the existing Sharp Bilinear shader.

Some are taken at 4K and others at 1600p:

3 Likes

Here are the Presets:

https://drive.google.com/drive/folders/15J1zr_aR47wzf8mm7hK6N9ZLPgJtnE97

All I politely ask is that you do not zoom into the image when you critique it and instead judge the image as a whole (as one actually plays it).

That’s cool having a preset after your nickname but I am a scanline boy. Not my style unfortunately. Thanks for being a fan anyway

2 Likes

@djayjp In the past i also played with different filters to get a nice picture. But after all implementing dithering for N64 emus and checking CRT images i realized current bilinear filters do not work the same way. A CRT beam runs from left to right and sometimes „smears“ in the following pixel. The beam looks like a thermal printhead running over phosphor which produces more vertical propagation for high R or G or B values. Darker colors will show not illuminated phosphor color at the vertical borders. Darker colors also look darker with less vertical propagation. You will also not see a CRT dotmask or scanline borders from 1m distance because your eye will mix colors up. If you take this assumption into account picture looks in my opinion more like intended.

4 Likes

Here is the same set of scenes I had before, but with the new set of presets included. And I follow your wish not to include any 1:1 close up “zoomed in” crops. All full sized screenshots are uploaded to imgsli again, which allows comparison with a slider. Selection of the screenshot can be done in the drop down menu. They are all shot at 1440p (but I can do any other resolution, if anyone is interested).

But here is something I learned today, how to create side by side cropped collages. And yes, this is born by the idea to respect your wish, because these have full height of the image and are intended to be judged without zooming in, all side by side.

What I noticed is, that the Sharp and VerySharp variants are identical to me and they also look the same as nearest, or I don’t see the difference. Did I something wrong? I just downloaded the files and used them here as they are. Or was this an user error on your side? Looking inside the files, I can see VerySharp is only

#reference "Alphultima-3-Sharp.slangp"
sharpness = "0.450000"

Sharp is similarly in this format and completely different from Smooth and VerySmooth.

2 Likes

SOTN seems to be the game with scanlines in mind. After comparing screenshots and zooming in (sorry!) the picture seems to have more depth and opjects seem to be 3D. Take a look at the fringe of the lifebar and the special item holder.

3 Likes

You will get a better effect by combining nearest-neighbor with Gaussian blur instead of bilinear. Bilinear doesn’t blend diagonally. A Gaussian filter can be approximated by simply doing NN interpolation by x and doing a Gaussian blur with radius x.

You can also try the bicubic (really a Mitchell-Netravali filter) shader in Libretro. Wikipedia has an entry for understanding the adjustment of the coefficients.

I’m considering changing my own shader upsampling method from MN to Gaussian. but I haven’t done any experiments yet. MN gives you flexibility with its coefficients which I use as a ‘focus’ parameter. It works pretty well for me.

EDIT: one more thing: I suggest linearizing the color data before doing the upscaling, because you will get shifts in brightness if you blend them in gamma-corrected space with either the Gaussian or MN filters.

2 Likes

Yep I’m familiar with how CRTs work. This is not a CRT emulation shader though, so I’m not sure why that’s being mentioned. Please note that those images are lacking pixel blending (except for maybe the SotN one?). I can point out exactly how/where, if you like.

Hmm interesting idea there. I haven’t tried that. I have extensively used customized windowed/jinc/sinc filters though and I found this approach to give much better results in my experience.

I’ll try Gauss next!

Yep something has gone wrong there. Maybe because it was saved just as a shortcut/simplified, pointing to the base shaders? I’ll try to fix that. Thanks for pointing that out!

1 Like

I experience some trouble regard that too. I “think” it depends on what Shader file you load in and then save. Then it would only save the difference to that file. So if that previous file only have differences to another file, that you might be have deleted in example, then it’s gone. One way to handel this is to create a copy of the file you want to edit and then load the copy directly.

Hopefully nothing is lost (I experienced that). Always keep backups of working versions and a history of older versions, is my personal recommendation.

1 Like

Yep. Pixel blending is not used with the first two images because it looks ugly with snes stuff in „my opinion“.

And if you shader meets your requirements, its ok. Just wanted to show you that a crt or blending can show some hitten gems. And bilinear is not the right thing for blending „i think“.

I think there’s a place for shaders that don’t try to simulate actual display (CRT) behavior. It is interesting from a purely signal processing theory perspective. For example, I think it would be interesting to have shaders analogous to NN, but with different shapes, and a good anti-aliasing filter to smooth the result. It would be interesting to have this with circles or diamonds instead of squares. The question would be how to tile it properly, and how to handle blank space.