Please show off what crt shaders can do!

Fake-lottes with image-adjustment.glsl as 1st pass and curvature removed. Really fast and good looking for a not so powerful device.

3 Likes

I actually made and tested this “Vaseline” preset earlier this morning. Not as a result of any of your posts though it was purely coincidental as I was experimenting with ways in which I could improve my latest CyberLab Mega Bezel Death To Pixels Composite Pure preset! My other presets failed the Sega Genesis dithering to make more colours and transparencies test but I actually stumbled upon this accidentally while trying to eliminate dithering from a SNES game.

The result? Perfect and beautiful transparency and reflective glass effects in Sonic The Hedgehog - the way it was meant to be played I’d say! Now I have to go and play it all over again just to see how beautiful it looks.

I’m calling this new preset CyberLab Mega Bezel Death To Pixels (Composite - Vaseline)! lol Actually, I think I’ll just call it CyberLab Mega Bezel Death To Pixels (Composite).

I will add it to my shader presets post a little later. My screenshots really need an update as they’re lagging way behind my presetss now. I would have to use video clips to accurately represent my presets though because they all contain “active” elements and don’t look as good when paused or frozen. Even that is a challenge because too low of a bitrate or wrong settings can lead to a similar problem as the screenshots or worse.

1 Like

From old EGM and GamePro memory, I thought the Sega Genesis could display 64 Simultaneous colours, sometimes more?

2 Likes

Exact 64 color :grin: This was from memory 20 years ago. That’s why I say memory and recollection are not always reality. Like having a reference crt. for shaders To see the truth.

2 Likes

The thing with memory, just like eyesight is that it varies from person to person and some people have much better memory than others so you can’t always count it out.

1 Like

FYI If you want to copy the “hound’s tooth” effect, you can use this shader pass from @guest.r

New CRT shader from Guest + CRT Guest Advanced updates - RetroArch Additions / Shaders - Libretro Forums

4 Likes

thank you my friend i hope you understand better now why nesguy told you that your old preset was blurry, if like me he saw and played with good quality cabling on his rvb consoles

and I also told you that your preset was blurry, it was not to denigrate your work that I respect, it’s just to tell you that in 2021 I’m playing on my sony crt some retro games and it’s easier for me to see the truth, than childhood memories.

The comment I posted is not from me; it’s not me who says that “But since I originally posted this I decided to pick up a 13” Sony PVM and a SCART switcher. The seller of the switcher threw in a bunch of cheap RGB SCART cables. I only had an RGB cable for my model 1 Genesis up to this point, but now I had a model 2/3 RGB cable. So naturally I decided to test it out. I was using composite for a few months with the Genesis 3, so that’s what I was use to seeing. I hooked up the RGB cable with the Genesis 3 and WOW I forgot how amazing blurry the Genesis composite really is. It really is like smearing Vaseline all over the screen. RGB is so crisp, so clean.

it’s just the truth I know from my childhood until 2021 because my sony aperture grill kvm 1450b tv crt is cable in rvb. so when i see blurry, dark shaders, not representative of reality? that’s what i see in the present, live, on my crt. I can only say it’s blurry, but the user goes further by saying

RGB cable with the Genesis 3 and WOW I forgot how amazing blurry the Genesis composite really is. It really is like smearing Vaseline all over the screen. RGB is so crisp, so clean.

So here I am willing to help, always a pleasure to share. when i test your preset, we’ll get in touch, and if you want me to help you take pictures, screenshots, or video of your preset in action? i’ll be there to help you if you want.

quote from cyber The result? Perfect and beautiful transparency and reflective glass effects in Sonic The Hedgehog - the way it was meant to be played I’d say! Now I have to go and play it all over again just to see how beautiful it looks.

I’m really glad you’re going in the right direction, I share your joy the rvb is beautiful on all consoles and to see that in a shader is a tribute to crt… if some users like blur and smudgy colors? it’s their choice that i don’t share, why would i degrade the video signal in a shader when it’s not the original hardware quality, it’s just the result of a user who uses an inadequate, cheap, and bad quality cable. and on top of that who doesn’t even have a tv crt anymore to see that he’s wrong so everyone does what he wants, I repeat.

The issue there was that you hadn’t tried the presets which had evolved way past that plus you were using an old screenshot of the presets as well. One of the first iterations.

I can’t recall him saying that my old preset was blurry but I do remember him commenting on a screenshot, not as old and outdated as the ones you used in your assessment. He said he didn’t like XBR and I told him that I didn’t use XBR. I told him I use Scale FX and he said why he didn’t like things like that. I also told him that he shouldn’t judge from the screenshot.

Let’s not go around in circles with these things that have already been said and misunderstandings that have already been resolved only to unresolve them again.

Remember this whole thing is all very subjective. Please look at the first few posts in this thread and you’ll see what the original poster and some others preferred. My issue at first was based on a misrepresentation then. When I showed you the current screenshots you said they were close to yours just darker or at least that’s what I gathered.

3 Likes

image

shaders = "12"
shader0 = "shaders_slang/misc/grade.slang"
filter_linear0 = "false"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = ""
float_framebuffer0 = "false"
srgb_framebuffer0 = "false"
scale_type_x0 = "source"
scale_x0 = "1.000000"
scale_type_y0 = "source"
scale_y0 = "1.000000"
shader1 = "shaders_slang/crt/shaders/guest/advanced/custom-fast-sharpen.slang"
filter_linear1 = "false"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = "StockPass"
float_framebuffer1 = "false"
srgb_framebuffer1 = "false"
scale_type_x1 = "source"
scale_x1 = "1.000000"
scale_type_y1 = "source"
scale_y1 = "1.000000"
shader2 = "shaders_slang/crt/shaders/guest/advanced/afterglow0.slang"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = "AfterglowPass"
float_framebuffer2 = "false"
srgb_framebuffer2 = "false"
scale_type_x2 = "source"
scale_x2 = "1.000000"
scale_type_y2 = "source"
scale_y2 = "1.000000"
shader3 = "shaders_slang/crt/shaders/guest/advanced/pre-shaders-afterglow.slang"
filter_linear3 = "false"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "true"
alias3 = "PrePass"
float_framebuffer3 = "false"
srgb_framebuffer3 = "false"
scale_type_x3 = "source"
scale_x3 = "1.000000"
scale_type_y3 = "source"
scale_y3 = "1.000000"
shader4 = "shaders_slang/crt/shaders/guest/advanced/avg-lum.slang"
filter_linear4 = "true"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "true"
alias4 = "AvgLumPass"
float_framebuffer4 = "false"
srgb_framebuffer4 = "false"
scale_type_x4 = "source"
scale_x4 = "1.000000"
scale_type_y4 = "source"
scale_y4 = "1.000000"
shader5 = "shaders_slang/crt/shaders/guest/advanced/linearize.slang"
filter_linear5 = "true"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = "LinearizePass"
float_framebuffer5 = "true"
srgb_framebuffer5 = "false"
scale_type_x5 = "source"
scale_x5 = "1.000000"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "shaders_slang/crt/shaders/guest/advanced/gaussian_horizontal.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = ""
float_framebuffer6 = "true"
srgb_framebuffer6 = "false"
scale_type_x6 = "absolute"
scale_x6 = "800"
scale_type_y6 = "source"
scale_y6 = "1.000000"
shader7 = "shaders_slang/crt/shaders/guest/advanced/gaussian_vertical.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = "GlowPass"
float_framebuffer7 = "true"
srgb_framebuffer7 = "false"
scale_type_x7 = "absolute"
scale_x7 = "800"
scale_type_y7 = "absolute"
scale_y7 = "600"
shader8 = "shaders_slang/crt/shaders/guest/advanced/bloom_horizontal.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = ""
float_framebuffer8 = "true"
srgb_framebuffer8 = "false"
scale_type_x8 = "absolute"
scale_x8 = "800"
scale_type_y8 = "absolute"
scale_y8 = "600"
shader9 = "shaders_slang/crt/shaders/guest/advanced/bloom_vertical.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = "BloomPass"
float_framebuffer9 = "true"
srgb_framebuffer9 = "false"
scale_type_x9 = "source"
scale_x9 = "1.000000"
scale_type_y9 = "source"
scale_y9 = "1.000000"
shader10 = "shaders_slang/crt/shaders/guest/advanced/crt-guest-advanced.slang"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = ""
float_framebuffer10 = "false"
srgb_framebuffer10 = "false"
scale_type_x10 = "viewport"
scale_x10 = "1.000000"
scale_type_y10 = "viewport"
scale_y10 = "1.000000"
shader11 = "shaders_slang/crt/shaders/guest/advanced/deconvergence.slang"
filter_linear11 = "true"
wrap_mode11 = "clamp_to_border"
mipmap_input11 = "false"
alias11 = ""
float_framebuffer11 = "false"
srgb_framebuffer11 = "false"
scale_type_x11 = "viewport"
scale_x11 = "1.000000"
scale_type_y11 = "viewport"
scale_y11 = "1.000000"
g_crtgamut = "0.000000"
g_vignette = "0.000000"
CONTR = "0.250000"
WP = "-100.000000"
glow = "0.000000"
brightboost = "2.500000"
brightboost1 = "2.500002"
gsl = "1.000000"
beam_size = "0.000000"
vertmask = "0.500000"
scans = "1.000000"
spike = "0.000000"
h_sharp = "4.000001"
s_sharp = "1.000000"
shadowMask = "7.000000"
maskstr = "0.800000"
mcut = "0.800000"
masksize = "2.000000"
mclip = "0.000000"
gamma_out = "2.799998"
deconrr = "1.000000"
deconrb = "-1.000000"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3;SamplerLUT4"
SamplerLUT1 = "shaders_slang/crt/shaders/guest/advanced/lut/trinitron-lut.png"
SamplerLUT1_linear = "true"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT1_mipmap = "false"
SamplerLUT2 = "shaders_slang/crt/shaders/guest/advanced/lut/inv-trinitron-lut.png"
SamplerLUT2_linear = "true"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT2_mipmap = "false"
SamplerLUT3 = "shaders_slang/crt/shaders/guest/advanced/lut/nec-lut.png"
SamplerLUT3_linear = "true"
SamplerLUT3_wrap_mode = "clamp_to_border"
SamplerLUT3_mipmap = "false"
SamplerLUT4 = "shaders_slang/crt/shaders/guest/advanced/lut/ntsc-lut.png"
SamplerLUT4_linear = "true"
SamplerLUT4_wrap_mode = "clamp_to_border"
SamplerLUT4_mipmap = "false"
3 Likes

I have a week free to test your settings, it will be great. Thanks for all your sharing, you should have a place to share. Now I’ll have to look everywhere for your presets. And you don’t say exactly what shader you use, if you use guest adv ntsc for the nes famicom? And that I am on guest advanced revision2 . I don’t think I have the same rendering. Thanks for sharing.

To be fair, even if it’s a developer trick to get transparencies.

It doesn’t change the fact that they are technically broken if not viewed via composite, as any use of pseudo-transparencies on the genesis had to be intentional like 99% of the time. You don’t accidentally make a half transparent dithering pattern :joy:

I will agree that the genesis didn’t have transparency in the same way as the SNES. (As the genesis didn’t have real transparency)

Basically to say that Genesis transparencies aren’t broken over anything other than composite is inaccurate, as they are, even if the genesis didn’t support real transparency. (As pretty much all transparency done on the genesis via composite was definitely intentional, so saying it’s anything other than broken via other display methods is incorrect imo)

3 Likes

I know this question will further expose my ignorance in this thread, but what is palette cycling? And how does this feature work perfectly to simulate a true transparency effect? When you change the colors of the palettes to make the graphics using those colors look like they are animating. (Pulseman’s clock does this, as do the waterfalls in Sonic games, etc.)

The transparency effects on Genesis are tricks Like the palette cycle etc… I don’t go into details otherwise I have to write 20 pages here…a book as you say So here there is a little info. https://www.sega-16.com/forum/showthread.php?28972-Mega-Drive-Genesis-Transparency/page5

1 Like

The pallet cycling that both of those examples you mentioned have to do with animation and not transparency. (I’m busy reading a book ATM, but I’ll look through that link in a bit, idk what pallet cycling has to do with transparencies tbh, as afaik all the pseudo-transparencies that the genesis does are the exact same, dithering of the color they want to be ‘transparent’ and no color, composite blends them to create a transparency)

It’s swapping colors to fake “animation”, basically they get away with not having to use more resources for graphics, because instead of swapping sprites to go through an animation they just swap some colors out, which saves on resources.

Basically let’s say I have a window that is normal but the scene is at night. And I want the windows to flicker on and off with light. I could make multiple images to do that animation, or I could pallet swap, use the same image with some colors swapped to imitate that animation. (It would save me space on the game, plus I could use the ram and stuff that would’ve went to swapping sprites to animate the window to something else)

3 Likes

There are a lot of ways to do it but I won’t detail it here, it’s not the right thread. I could explain it in 20 pages like in 1000. Vblank,scanline change, palette cycles, rendering and many other techniques for that.

Metal Slug 3 on the Neo Geo also makes heavy use of animation-based transparency. On the big alien boss, when he’s still covered in his brain, the energy balls he generates are transparent, but when they start moving towards you, they become solid. The reason they are transparent at first is because they are all pre-rendered.

Or maybe that too. Are you telling me that composite is useful for displaying transparency? I suggest you read the link I provided. Everything I site comes from there.and the answer to your question is also there I think…

It’s always a problem of semantic argument. Is the shaking of the checkerboard transparency? Is blinking an image every odd frame transparency? Both accomplish a similar effect to transparency, as does S/H. It’s very different for me, dithering only works in the case of bad video output, and the flashing image is easily broken just by pausing the game, so anyone can see that it’s fake! Very different from S/H mode, which works great on any video output and looks great even today.

https://www.sega-16.com/forum/showthread.php?28972-Mega-Drive-Genesis-Transparency

In depth

https://www.sega-16.com/forum/showthread.php?9179-Highlight-and-Shadow

https://www.sega-16.com/forum/showthread.php?25837-Games-that-use-Shadow-Highlight

Discussion between users of the good and not so good

https://www.sega-16.com/forum/showthread.php?42-Genesis-VS-SNES-VS-TG-16&p=32485&viewfull=1#post32485

For example in the link highlight and shadow I can see interesting things like this…

Quote Originally Posted by Jasper061992 View Post

Oh. If it’s a scan line change, how come every time I have slowdowns underwater, the color stays solid (no flicker)? I can tell the difference between the water in Sonic 1 (the water in the maze which has a real clean hue and the water in act 1 of the aqua planet area in Sonic 2 which has a dotted look every other pixel. Is this the effect of changing the scan line?

Are these two Sonic you are talking about the SMS or Genesis versions? The Genesis version of Sonic 1 does mid-screen palette updates (it may even do mid-screen tile changes too, but I doubt it since it already does palette block updates).

This leaves artifacts of corrupted pixels on the screen, mostly evenly spaced (it’s either 16 or 32 pixels apart, I forget from memory). So they put glittery/alternating sprites at the edge to help hide that. And that really makes it imperceptible. Also, when you change the position of a palette or mosaic in the middle of the screen, the rest of the screen is now drawn with these new updates. So you don’t need to do this effect on every scan line. Just at this point.

Actually, when i pause the game on Sonic 1-3 that flickering water waves can disappear at one side. The sprite colour neatly changes colour when one half is outside and the other inside along with any other graphics thats half out.

I’m not sure what you’re asking though? Not every transparency trick uses 60hz “flicker”, obviously. And what the game does when you pause it, is up to the developers. There’s nothing to prevent the sprites from alternating on the waters edge, other than the programmer decided the pause function was also going to pause that routine as well. There are a lot of tricks you can do be it the SMS or the Genesis, and not all of them are necessarily the same. Hell, SMS games are known to do software sprites because it has 4bit tiles. You’ll 99.999% never see this on the NES because if its lower color count/restrictions on tiles. If I were going to do such method on the SMS, it would a tilemap method like I mentioned earlier on and interrupt, and manually update the Sonic sprite with different colors depending on which point he entered the water (mainly, because I’m not sure what the effects or possibility of updating palette ram mid screen on the SMS), which is a very simple task given the 4bit color limit of sprites.

lol, i meant if Sonic loses rings underwater, the game framerate slows down to 25-30fps and yet the water colour is still solid, no flicker.

Why would that make any difference though? And interrupt is an interrupt. It’s going to happen whether the game codes falls behind or not, on a frame. It’s regardless if this is done via palette reg updates or tilemap method, or both. The color shouldn’t flicker because the game slowed down. You might be confusing this with some else (or some other broken/borked game engine) or maybe flicker style transparency. Dunno.

What I think wrvb The mask is like this e.g. R,V,B,black line falling on the white.diode. etc. The slot mask here is rvb, not black and white as you say. So do you see the rvb’s touching each other, or are they glued? Do you take into account the black spaces between rvb. The wrvb has one more diode and the mask has R,G,B black line, and where does the black.line fall on the oled structure? Forcing on the white diode not? R V B = 3 plus black space ? = 4 and wrvb = 4 Here is what I think for example.

I am not trying to prove you wrong. I’m trying to understand why the wrvb would be a problem…that’s different. :grin: There is no technical topic about it, no shader designer talks about it, no designer complains about retroarch on oled smartphone, so ? I’m trying to understand why that’s all. That we are not many to have an oled TV yes, but millions of smartphone Oled, so potentially millions of users of retroarch android I don’t see anyone complaining. So I try to understand

But you say that oled is wrong with mask? It’s up to you to prove what you say. I’m trying to understand what could be the problem with what you say, that’s all.

and all four are never on at the same time… OLED TVs use emissive technology and each pixel emits its own light at different intensities. Each pixel on an OLED TV consists of four such subpixels, and all four are never on at the same time. This is why we always take multiple photos of our OLED TVs, as you can see in the photos below.

And you told me several times, on the oled the rvb masks are wrong. Then you said that the best compromise was the black and white mask.

So I took the time to make a video of ristar on oled with guest advanced rev2. Which uses the aperture grill trinitron (the famous mask that would cause problems on oled) Because the slot mask has black spaces that the aperture has just vertical bands rvb … So the mask that should cause the most problems (if I follow what you say) is the aperture grill.

And I’m telling you that I don’t see any problem neither from far nor from near so I understand the mask structure. But the result is there in the video…I don’t see any mask overshoot on the white or anywhere else, and I looked closely at my TV…so I believe you, but what I see? This is the video.

Probleme wrvb ? With guest advrev2, aperture grill RVB Video oled wrvb ristar genesis https://drive.google.com/file/d/12W4QAgCJ1PV19KELyjUWbMDSEG5AWCcy/view?usp=sharing

I know you’re having trouble understanding this but I’ve explained it several times and I don’t care to keep repeating myself. You lack an understanding of subpixel structure and how this relates to crt masks. Here’s a good post by our very own Hunterk to help you get started.

Here’s what magenta green looks like with WRGB

WRxBWxGxWRxBWxGx 
WRxBWxGxWRxBWxGx
WRxBWxGxWRxBWxGx
…

Etc. does that look like the RGB phosphors of a CRT to you?

You’re not really following. Aperture grille isn’t any worse than the slot masks when it comes to subpixel compatibility, slot mask just has the additional problem of needing a really high resolution to look good.

The OLED with black and white masks is good enough IMO, but that’s not what this is about. This is about getting as close to a CRT as possible.

1 Like

Right, I don’t understand, because I don’t see on my TV the problems that should be seen. Neither from near nor from far.

So thank you, I’m going to look into it, with the link you provided (hunterk) Not easy between the theory, the technology of rvb tv, wrvb etc… Then we, with shaders that simulate a crt that has yet another technology. It becomes complex, as today there is nothing done for oled specifically in shader. The future will tell us, the more shader creators will have oled, the better our chance to see shader optimized and designed for its TV. For oled smartphones? Apparently users don’t seem to mind retroarch either.

Thank you nesguy for taking the time, and for repeating several times. :joy: But I will try to understand the thing, in relation to the wrvb oled technology. Come on I’ll read hunterk’s explanation on masks, thanks again for the time and patience. And the link share. Always a pleasure.

These patterns rely on the physical pixel structure of the display monitor, so they need to be tiled using gl_FragCoord (or texCoord.st * OutputSize.xy) so the tiling always matches up.

So I don’t think it’s impossible for a shader programmer to do this, right? The formula adapts the mask on the structure, if the mask takes into account wrvb, to fall back on a classic rvb display ? It’s up to the programmer to say so. I’m just a user, using shaders on an oled with a sony crt to compare. And close up on my tv? I don’t see any artifact, that should be really visible, and capturable in pictures or video? But I don’t see that it is.

Oh yes, I know this link in fact, already visited many times. What I see is the diversity of rvb crt structure or whatever. An incredible amount of difference here.

https://geometrian.com/programming/reference/subpixelzoo/index.php

I managed to find exactly the model of my TV and its structure… So there!? No blue…

What is completely different here… My oled panasonic lg panel. And the lg brand has different structures depending on the model and the year.

And I looked at the code posted on the hunterk blog which sent me here Which allows me to see how it works, and there are annotations in the code that are useful for example. Knowing that such mask is too small for 4k, or not adequate for 1080p etc… I can already understand the thing better, I see math, and png’s… So no problem I think in the future the wrvb oled will have the right shader. I’ve done 2d games, unity, and now unreal engine. But I’m self-taught, I do everything by passion on my own. So the shader code ? Never worked on it, but much easier than programming a camera to unreal engine that fits, without crossing walls…like mario64… Probe, vector, collision in 3d, ( it literally broke my head) I see simple code, even if the math is complex, but someone who masters math will get through it easily I think. What is this simplified language? It’s not c, not c++,Or looks like c# ( csharp) ?. Like on unity3d. but looks like basic. With the else and if conditions etc…

1 Like

Remember, this is OLED so the black is just the blue pixel in the off position. There is no ‘black’ pixel.

@Nesguy hey I’ve been doing some thinking and I don’t think that the white pixel changes things as far as subpixel compatibility with magenta/green because it is used exclusively to boost brightness. I don’t see any difference in hue shifts when using either magenta/green, Black and white, or RGB masks. I think it could be a misunderstanding of how the white pixel works. Obviously, BGR would make a difference. Thoughts? :thinking:

Otherwise, wouldn’t most content look off?

1 Like

If this was a problem that could be solved then @guest.r would have solved it by now. You’re not the first person to use an OLED with shaders, this has been a known issue for a while.

Good luck to you, though.

1 Like

It’s an issue of subpixel spacing. If the subpixels aren’t spaced properly then you get chromatic aberration and color fringing at the subpixel level. Whether or not this bothers you is subjective.

If you can capture the subpixels at 4K, then post a photo showing correct subpixel spacing on an OLED and tell us how you did it.

1 Like