One more thing lol. How to make the base (dark) mask strength look like a slot mask?
On a real CRT the slotmask features aren’t visible with “base mask”, there was a debate in this thread about it, so it looks aperture-like with this feature.
You can have slotmask features with accordingly setup magic glow OTOH.
That was the first thing I did, as I figured interlacing would be likely to throw a wrench into things. I ended up trying a few other shaders to see if any of them did something similar, and sure enough, crt-aperture does through a parameter called Scanline Offset. With it off, it behaves like modern GDV, but turned on, it looks like guest-SM, on hi-res content anyway. It appears to work by shifting the lines down by a single pixel, resulting in the desired look.
I remember reading about the dev conversation of crt-aperture. It has, as i remember, a special mode to display scanlines 4-pixel thick (like for 800p etc. displays).
Something like this:
xxxxxxxxxxx
xxxxxxxxxxx
xxxxxxxxxxx
-----------
instead of:
-----------
xxxxxxxxxxx
xxxxxxxxxxx
-----------
Indeed, the Scanline Offset parameter I speak of in crt-aperture appears to do that.
On another note, I have a question about the grade pass you included that can be inserted into GDV. Grade has a CRT gamma parameter, set to 2.5 as default. Given that GDV already has Gamma input and output parameters, how does grade’s gamma parameter interact with that? What should it be set to?
Hello, I like some of the qualities of the Royale shader but I do not like the hit to performance. After messing with the latest Guest I feel I have something that is a good substitute. I get similar colors, clipping on saturated beams, and the more pronounced mask “dot-i-ness”. It’s not accurate to any kind CRT but it looks nice on my 4k laptop.
Royale Crop
Guest Crop
shaders = "12"
shader0 = "shaders_slang/crt/shaders/guest/advanced/stock.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/stock.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 = "true"
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"
TNTC = "4.000000"
wp_saturation = "1.100000"
interm = "0.000000"
m_glow = "1.000000"
m_glow_dist = "1.999999"
m_glow_mask = "0.000000"
SIGMA_HB = "0.500000"
glow = "0.300000"
bloom = "0.100000"
mask_bloom = "0.500000"
halation = "-0.150000"
brightboost = "0.900000"
brightboost1 = "1.300000"
gsl = "-1.000000"
scanline1 = "20.000000"
scanline2 = "20.000000"
beam_min = "1.899999"
beam_max = "1.100000"
scans = "1.000000"
h_sharp = "6.999998"
shadowMask = "11.000000"
maskstr = "0.850000"
maskboost = "2.750000"
mask_gamma = "1.500001"
double_slot = "1.000000"
mclip = "0.150000"
deconrr = "1.000000"
deconrb = "-1.000000"
deconrry = "1.000000"
deconrby = "-1.000000"
decons = "0.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"
While subtle, changing the mask type, size, or RGB vs BGR, all effects the clipping on saturated beams and will probably be different for every display.
As i recall, grade’s gamma loop is closed, which means after grade finishes it’s color processing, the color space is ‘reset’ to original. Similar happens with my color grading, which involves different types of gamma strengths. Otherwise the overall image appearance would be very notable darkish.
So you can handle the grade gamma in its own environment, preferably leave it as it is.
Hey, some nice tweaking. I also tried some new features lately…with nice results i guess…
ntsc_phase = "4.000000"
ntsc_cscale = "1.999999"
ntsc_sharp = "-7.000000"
CSHARPEN = "0.500000"
CCONTR = "0.200000"
FINE_BLOOM = "3.000000"
mask_bloom = "-0.600000"
halation = "-0.100000"
gamma_c = "1.300000"
clips = "0.500000"
gsl = "-1.000000"
scanline1 = "5.000000"
scanline2 = "7.000000"
beam_min = "1.100000"
scans = "1.500000"
ssharp = "0.150000"
shadowMask = "6.000000"
maskstr = "1.000000"
maskboost = "1.500000"
slotmask = "1.000000"
slotmask1 = "1.000000"
smask_mit = "0.700000"
NTSC preset with “NTSC” color LUT option selected.
Loving both posts from @guest.r and @BendBombBoom. @BendBombBoom I always wondered what a royale style guest preset would look like and you got it pretty close.
@guest.r I also switched the LUT in the grade shader and that’s exactly what my next update is based on. I also experimented tweaking a setting called “crt hue”. Changing that value by just 1 in the negative value gives skin tones this almost “pinkish” hue to skin tones, it’s very subtle but kind of reminds me of the posts by you two above. Still deciding if I should go with that look or not. These are just my tweaking thoughts out loud don’t mind me lol.
This is a silly question, but to achieve similar result do you mean we use the “guest advanced HD” and then change those parameters you listed?
I have a tiny bit experience with changing values, but when you post things like this Im unsure if it means more steps aswell.
Hey there!
Yes, most certainly. It would be optimal if you just load the guest-advanced-hd (and change a parameter or two), save the preset and then copy/paste the listed parameters into the appropriate place in the preset text file. Saves a lot of time and works very nice.
Ah ok, Im usually sitting in the sofa using my controller when I do this (and the emulator is not close) so Its a little hassle to copy paste actually, thats why I just change the parameters right then and there, but saving a new preset is smart!. But as long as I know what to do I will try this out.
It reminds me of some arcade-machines when I was small so this will be really cool for some of those games.
Trying a quick aperture setup with xbr x3 scale (instead of stock shader). The HD version is very nice with pre-scalers.
internal_res = "2.200000"
m_glow = "1.000000"
FINE_BLOOM = "3.000000"
IOS = "2.000000"
glow = "0.150000"
mask_bloom = "-0.750000"
gamma_c = "1.200000"
clips = "0.500000"
gsl = "2.000000"
scanline1 = "5.000000"
scanline2 = "15.000000"
beam_min = "2.999998"
tds = "1.000000"
scans = "1.800000"
shadowMask = "12.000000"
maskstr = "1.000000"
maskboost = "1.350000"
mask_zoom = "-3.000000"
deconrr = "1.000000"
deconrb = "-1.000000"
deconrry = "1.000000"
deconrby = "-1.000000"
thanks again guest.r for your great shaders. do you it could possible to implement the “tate orientation” setting on the HD version of your shader? thanks regards
TATE mode doesn’t allow some more recent performance optimizations, so it’s currently only available in the standard version.
Fortunately, the standard’s version filtering is adequate for vertical resolutions, maybe there is a disadvantage with pre-scalers, but should be better with xBR at 2x or super-xbr.
Ok thanks for the clarification. Regards
@guest.r Just a quick message to notify you that cmask = min(cmask, 1.0); is missing from deconvergence-ntsc.slang. It will fix mask boost, now I can use same settings between normal and ntsc presets.
Normal guest
Ntsc preset with same values
Hey there. Dunno if it’s on purpose, but probably not. I’m fixing some more stuff and will probably include the mask fix in next release. Thanks again for the “find”.
New Release Version (2023-10-24-r1):
Notable changes:
- Mask clamping fixed in non-standard verisons.
- New scanline saturation implementation with a nice performance bump.
Download link:
https://mega.nz/file/8hpiXLxJ#qslf9b6FrjD7p0rdlW6tRLFFI14x87UDc8wkKX4m7k0
Nice. Was hoping you had included the last upgraded grade shader that Dogway put out but it’s not a big deal, forgot what was even upgraded there.