Please show off what crt shaders can do!

Nope, I’ll check it out though. Life’s been a bit hectic.

1 Like

He did a handful of things, like 2 or 3?

1 Like

Idk, I like both of those for different reasons. I think razor-sharp pixels are fine for GBA because the artwork was designed for the GBA’s LCD screen. They both have their charms, though.

I think the LCD shader is another good option for handheld systems.

1 Like

Im trying your settings! and good look with lot of options.

Can you add the new HLSL effects humbar, jitter, and distortion? or how to? i ave the settings in HLSL but the mask i not find a good.

Thanks.

So i am using a 19" 1280x1024 monitor, with mask 0 i get 640 emulated pixels, pretty close to a CRT TV, what about the TVL? I get 1024/2= 512? That looks close to a high res PVM. I guess if i stretch the image 5x4 let’s say NES 256x240= 1280x960 but then the pixels will be incorrect? I mean 1 pixel will be 5 pixels on screen, that’s 2,5 emulated pixels.

1 Like

Look, this is with a filter that put a member abobe, @Nesguy, not is HLSL shader. That filter of that screenshot not ave distortion real, not ave humbar, and not ave jitter effect.

This near perfect, i try jut a bit… That kind of mask is same that CRT geo, but is not possible to get in HLSL filter, im not know how, is the triniton, but the sizing is not teh same as Nesguy silter config.

That screen shot with the other effect…and we ave the PERFECT SYSTEM. pum

I dont know how to add these effecta on a filter, …if i find i will add. Also Nesguy config need the option of…centering screen!!, because los of plattaforms and games need this, because some games is not centered good, tekken arcades, some neo geo…Flycast …

If not possible the movement effect of newpixie-crt is welcome too, but the real is the jitter. Thanks.

  • After some tests I reverted the gamma rework commit, but I did change the OETF to sRGB, so for the most people under sRGB display it doesn’t mean any change to the preset settings.
  • I also added a Rec.709 output space if you calibrated to 2.4 gamma.
  • Fixed the LUT implementation (now it works properly)
  • Fixed rolled_gain function (was clipping some, might be of interest to @Nesguy )
  • Fixed a small issue on glsl version.
  • Changed temperature default to D55 (more neutral)
  • And added output space range up to 4.0 to include AdobeRGB (an overlook on my side).

So for the most part it means no changes on the user side for current presets.

2 Likes

The suggestions I posted are for guest-dr-venom, sorry for not making that clear :neutral_face:

I’ll add a note to the post.

You can take these suggestions and apply them to HLSL but the setting names and numbers won’t be the same.

You can center the screen with the video settings, but it should already be centered unless you’re using a non-integer custom resolution.

@LinerCRT

1 Like

Yep :slight_smile: Similar to a PVM. TVs had lower TVL, like 250-400 depending on size. It’s worth noting, though, that some PVMs had low a TVL, too. A 9” PVM could have 250 TVL; build quality, beam focus, connection options etc are what really distinguish a small PVM from a similar-sized TV.

I recommend taking the horizontal resolution, dividing by 3, then taking the resulting number and multiplying by 4 and setting a custom horizontal res. That way you have an exact 4:3 ratio while still using all of the vertical area of the screen. For example, if the vertical scale is 5x integer on a 1080p monitor and 1120 pixels tall: (1120/3) * 4 = 1493.333… which you round up to 1494 to perfectly center the image. The easiest thing to do here is to save the core overrides and then add a line in the config file for that core:

custom_viewport_width = "1494"

The important thing to remember is that a CRT is going to “correct” the image to 4:3, so I wouldn’t worry about pixel shape too much. Some people are really particular about such things, though, trying to get squares perfectly square or circles perfectly circular even though they wouldn’t appear that way on a CRT. If that’s your thing, more power to you.

2 Likes

@Nesguy @hunterk

Nesguy the community want your settings filter sugesttions but with jitter, humbar and distortion effects, because is near perfect to the real arcade CRT screens.

HLSL is great but i dint know how to add the sugestions of your filter settings. Nesguy filter apply the mask best than HLSL and ave another good sugestions effects too.

The Community of Shader, need this complete, this combination! or Nesguy filter suggestions with jitter, humbar and distortion, or HLSL with most of your settins suggestions, mask mode mettod, etc.

I know too with experience the CRT screens, with that settings comunnity play good and make very great and reality filter!

If i know any tutorial to do i wil try…

Big thanks!!!

Thanks for the kind words! I’m not sure how to achieve what you want, unfortunately. I know newpixie-crt has many of the effects you’re describing, so you could try replacing one of the stock passes at the beginning of the preset with that.

I’m not a big fan of those aspects of a CRT that didn’t enhance the image. I’m more interested in objective picture quality vs. absolute accuracy. For what it’s worth, jitter, humbar, etc. aren’t present on a good CRT that’s been well-maintained.

1 Like

Yes is about quality of image.

@hunterk add yesterday the jitter effect and the humbar filter effect with options to HLSL, newpixie-crt is another type of jitter but is not the real jitter of arcade CRT screens. Distortion effect no because HSLS was before.

Try to add to your settings, Hum bar, Jitter efffect and Distortion. HLSL as recently updated, yesterday, with jitter and humbar effects

We need to do that!! for the perfect image and simulation shader/picture.

I’ll check out HLSL some time in the next few days. Optimizing the HLSL shader has been on my to-do list for a while, anyway.

Regarding quality, I’m mostly only interested in things that enhance the objective picture quality (dynamic range/depth, color accuracy, etc) and less interested in things like signal artifacts, jitter, geometric distortion, etc since I don’t believe that these things actually enhance the image in an objective way. Geometric distortion and misconvergence is a good example highlighting the difference between “accuracy” and “quality.” On an actual CRT, there was always some amount of geometric distortion and misconvergence, but you tried to eliminate these things as much as possible through calibration. With emulation we can completely eliminate these undesirable artifacts, so that’s what I opt to do. Some people opt to include these things for the sake of nostalgia, but it’s not my cup of tea.

1 Like

Thanks ! for the try. I see your settings, very complete, im sure you do…

The idea is to get the rel arcade CRT, somes worn or burned…other NTSC, other the colors, etc… 70 years screens, 80, 90… We need Hum bar, Jitter and distortion in your settings…or your settings in the HLSL shader. Communitty entire win with that results.

With that, i will put the results.

Just a quick side-by-side.

guest-dr-venom slotmask:

Lottes stretched dot mask:

guest-dr-venom slotmask

shaders = "10"
shader0 = "shaders_slang/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/stock.slang"
filter_linear1 = "true"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = ""
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/misc/grade.slang"
filter_linear2 = "true"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = "WhitePointPass"
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/afterglow.slang"
filter_linear3 = "true"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = "AfterglowPass"
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/avg-lum.slang"
filter_linear4 = "true"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "true"
alias4 = "AvgLumPass"
float_framebuffer4 = "true"
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/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/blur_horiz.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = ""
float_framebuffer6 = "true"
srgb_framebuffer6 = "false"
scale_type_x6 = "source"
scale_x6 = "1.000000"
scale_type_y6 = "source"
scale_y6 = "1.000000"
shader7 = "shaders_slang/crt/shaders/guest/blur_vert.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = "GlowPass"
float_framebuffer7 = "true"
srgb_framebuffer7 = "false"
scale_type_x7 = "source"
scale_x7 = "1.000000"
scale_type_y7 = "source"
scale_y7 = "1.000000"
shader8 = "shaders_slang/crt/shaders/guest/linearize_scanlines.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = ""
float_framebuffer8 = "true"
srgb_framebuffer8 = "false"
scale_type_x8 = "source"
scale_x8 = "1.000000"
scale_type_y8 = "source"
scale_y8 = "1.000000"
shader9 = "shaders_slang/crt/shaders/guest/crt-guest-dr-venom.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = ""
float_framebuffer9 = "false"
srgb_framebuffer9 = "false"
scale_type_x9 = "viewport"
scale_x9 = "1.000000"
scale_type_y9 = "viewport"
scale_y9 = "1.000000"
parameters = "g_gamma_in;g_signal_type;g_gamma_type;g_crtgamut;g_space_out;g_hue_degrees;g_I_SHIFT;g_Q_SHIFT;g_I_MUL;g_Q_MUL;g_lum_fix;g_vignette;g_vstr;g_vpower;g_lum;g_cntrst;g_mid;wp_temperature;g_sat;g_vibr;g_satr;g_satg;g_satb;g_lift;blr;blg;blb;wlr;wlg;wlb;rg;rb;gr;gb;br;bg;LUT_Size1;LUT1_toggle;LUT_Size2;LUT2_toggle;SW;AR;PR;AG;PG;AB;PB;sat;lsmooth;GAMMA_INPUT;TAPSH;GLOW_FALLOFF_H;TAPSV;GLOW_FALLOFF_V;TATE;IOS;OS;BLOOM;brightboost;brightboost1;gsl;scanline1;scanline2;beam_min;beam_max;beam_size;h_sharp;s_sharp;csize;bsize;warpX;warpY;glow;shadowMask;masksize;vertmask;slotmask;slotwidth;double_slot;slotms;mcut;maskDark;maskLight;CGWG;gamma_out;spike;inter;interm;bloom;scans"
g_gamma_in = "2.500000"
g_signal_type = "0.000000"
g_gamma_type = "1.000000"
g_crtgamut = "2.000000"
g_space_out = "0.000000"
g_hue_degrees = "0.000000"
g_I_SHIFT = "0.000000"
g_Q_SHIFT = "0.000000"
g_I_MUL = "1.000000"
g_Q_MUL = "1.000000"
g_lum_fix = "0.000000"
g_vignette = "0.000000"
g_vstr = "40.000000"
g_vpower = "0.200000"
g_lum = "0.000000"
g_cntrst = "0.000000"
g_mid = "0.500000"
wp_temperature = "7905.000000"
g_sat = "0.000000"
g_vibr = "0.000000"
g_satr = "0.000000"
g_satg = "0.000000"
g_satb = "0.000000"
g_lift = "0.000000"
blr = "0.000000"
blg = "0.000000"
blb = "0.000000"
wlr = "1.000000"
wlg = "1.000000"
wlb = "1.000000"
rg = "0.000000"
rb = "0.000000"
gr = "0.000000"
gb = "0.000000"
br = "0.000000"
bg = "-0.005000"
LUT_Size1 = "16.000000"
LUT1_toggle = "0.000000"
LUT_Size2 = "64.000000"
LUT2_toggle = "0.000000"
SW = "1.000000"
AR = "0.070000"
PR = "0.050000"
AG = "0.070000"
PG = "0.050000"
AB = "0.070000"
PB = "0.050000"
sat = "0.100000"
lsmooth = "0.900000"
GAMMA_INPUT = "2.400000"
TAPSH = "4.000000"
GLOW_FALLOFF_H = "0.300000"
TAPSV = "4.000000"
GLOW_FALLOFF_V = "0.300000"
TATE = "0.000000"
IOS = "0.000000"
OS = "1.000000"
BLOOM = "0.000000"
brightboost = "0.500000"
brightboost1 = "1.500001"
gsl = "2.000000"
scanline1 = "15.000000"
scanline2 = "5.000000"
beam_min = "1.000000"
beam_max = "0.850000"
beam_size = "0.000000"
h_sharp = "3.000000"
s_sharp = "1.000000"
csize = "0.000000"
bsize = "600.000000"
warpX = "0.000000"
warpY = "0.000000"
glow = "0.020000"
shadowMask = "-1.000000"
masksize = "1.000000"
vertmask = "0.000000"
slotmask = "0.700000"
slotwidth = "3.000000"
double_slot = "1.000000"
slotms = "1.000000"
mcut = "0.250000"
maskDark = "0.500000"
maskLight = "1.500000"
CGWG = "0.300000"
gamma_out = "2.400000"
spike = "1.000000"
inter = "400.000000"
interm = "1.000000"
bloom = "0.000000"
scans = "1.000000"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3"
SamplerLUT1 = "shaders_slang/crt/shaders/guest/lut/sony_trinitron1.png"
SamplerLUT1_linear = "true"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT1_mipmap = "false"
SamplerLUT2 = "shaders_slang/crt/shaders/guest/lut/sony_trinitron2.png"
SamplerLUT2_linear = "true"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT2_mipmap = "false"
SamplerLUT3 = "shaders_slang/crt/shaders/guest/lut/other1.png"
SamplerLUT3_linear = "true"
SamplerLUT3_wrap_mode = "clamp_to_border"
SamplerLUT3_mipmap = "false"

Lottes stretched dot mask

shaders = "10"
shader0 = "shaders_slang/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/stock.slang"
filter_linear1 = "true"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = ""
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/misc/grade.slang"
filter_linear2 = "true"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = "WhitePointPass"
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/afterglow.slang"
filter_linear3 = "true"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = "AfterglowPass"
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/avg-lum.slang"
filter_linear4 = "true"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "true"
alias4 = "AvgLumPass"
float_framebuffer4 = "true"
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/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/blur_horiz.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = ""
float_framebuffer6 = "true"
srgb_framebuffer6 = "false"
scale_type_x6 = "source"
scale_x6 = "1.000000"
scale_type_y6 = "source"
scale_y6 = "1.000000"
shader7 = "shaders_slang/crt/shaders/guest/blur_vert.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = "GlowPass"
float_framebuffer7 = "true"
srgb_framebuffer7 = "false"
scale_type_x7 = "source"
scale_x7 = "1.000000"
scale_type_y7 = "source"
scale_y7 = "1.000000"
shader8 = "shaders_slang/crt/shaders/guest/linearize_scanlines.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = ""
float_framebuffer8 = "true"
srgb_framebuffer8 = "false"
scale_type_x8 = "source"
scale_x8 = "1.000000"
scale_type_y8 = "source"
scale_y8 = "1.000000"
shader9 = "shaders_slang/crt/shaders/guest/crt-guest-dr-venom.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = ""
float_framebuffer9 = "false"
srgb_framebuffer9 = "false"
scale_type_x9 = "viewport"
scale_x9 = "1.000000"
scale_type_y9 = "viewport"
scale_y9 = "1.000000"
parameters = "g_gamma_in;g_signal_type;g_gamma_type;g_crtgamut;g_space_out;g_hue_degrees;g_I_SHIFT;g_Q_SHIFT;g_I_MUL;g_Q_MUL;g_lum_fix;g_vignette;g_vstr;g_vpower;g_lum;g_cntrst;g_mid;wp_temperature;g_sat;g_vibr;g_satr;g_satg;g_satb;g_lift;blr;blg;blb;wlr;wlg;wlb;rg;rb;gr;gb;br;bg;LUT_Size1;LUT1_toggle;LUT_Size2;LUT2_toggle;SW;AR;PR;AG;PG;AB;PB;sat;lsmooth;GAMMA_INPUT;TAPSH;GLOW_FALLOFF_H;TAPSV;GLOW_FALLOFF_V;TATE;IOS;OS;BLOOM;brightboost;brightboost1;gsl;scanline1;scanline2;beam_min;beam_max;beam_size;h_sharp;s_sharp;csize;bsize;warpX;warpY;glow;shadowMask;masksize;vertmask;slotmask;slotwidth;double_slot;slotms;mcut;maskDark;maskLight;CGWG;gamma_out;spike;inter;interm;bloom;scans"
g_gamma_in = "2.500000"
g_signal_type = "0.000000"
g_gamma_type = "1.000000"
g_crtgamut = "2.000000"
g_space_out = "0.000000"
g_hue_degrees = "0.000000"
g_I_SHIFT = "0.000000"
g_Q_SHIFT = "0.000000"
g_I_MUL = "1.000000"
g_Q_MUL = "1.000000"
g_lum_fix = "0.000000"
g_vignette = "0.000000"
g_vstr = "40.000000"
g_vpower = "0.200000"
g_lum = "0.000000"
g_cntrst = "0.000000"
g_mid = "0.500000"
wp_temperature = "7905.000000"
g_sat = "0.000000"
g_vibr = "0.000000"
g_satr = "0.000000"
g_satg = "0.000000"
g_satb = "0.000000"
g_lift = "0.000000"
blr = "0.000000"
blg = "0.000000"
blb = "0.000000"
wlr = "1.000000"
wlg = "1.000000"
wlb = "1.000000"
rg = "0.000000"
rb = "0.000000"
gr = "0.000000"
gb = "0.000000"
br = "0.000000"
bg = "-0.005000"
LUT_Size1 = "16.000000"
LUT1_toggle = "0.000000"
LUT_Size2 = "64.000000"
LUT2_toggle = "0.000000"
SW = "1.000000"
AR = "0.070000"
PR = "0.050000"
AG = "0.070000"
PG = "0.050000"
AB = "0.070000"
PB = "0.050000"
sat = "0.100000"
lsmooth = "0.900000"
GAMMA_INPUT = "2.400000"
TAPSH = "4.000000"
GLOW_FALLOFF_H = "0.300000"
TAPSV = "4.000000"
GLOW_FALLOFF_V = "0.300000"
TATE = "0.000000"
IOS = "0.000000"
OS = "1.000000"
BLOOM = "0.000000"
brightboost = "0.500000"
brightboost1 = "1.500001"
gsl = "2.000000"
scanline1 = "15.000000"
scanline2 = "5.000000"
beam_min = "1.000000"
beam_max = "0.850000"
beam_size = "0.000000"
h_sharp = "3.000000"
s_sharp = "1.000000"
csize = "0.000000"
bsize = "600.000000"
warpX = "0.000000"
warpY = "0.000000"
glow = "0.020000"
shadowMask = "3.000000"
masksize = "1.000000"
vertmask = "0.000000"
slotmask = "0.000000"
slotwidth = "2.000000"
double_slot = "1.000000"
slotms = "1.000000"
mcut = "0.250000"
maskDark = "0.500000"
maskLight = "1.500000"
CGWG = "0.300000"
gamma_out = "2.400000"
spike = "1.000000"
inter = "400.000000"
interm = "1.000000"
bloom = "0.000000"
scans = "1.000000"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3"
SamplerLUT1 = "shaders_slang/crt/shaders/guest/lut/sony_trinitron1.png"
SamplerLUT1_linear = "true"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT1_mipmap = "false"
SamplerLUT2 = "shaders_slang/crt/shaders/guest/lut/sony_trinitron2.png"
SamplerLUT2_linear = "true"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT2_mipmap = "false"
SamplerLUT3 = "shaders_slang/crt/shaders/guest/lut/other1.png"
SamplerLUT3_linear = "true"
SamplerLUT3_wrap_mode = "clamp_to_border"
SamplerLUT3_mipmap = "false"
6 Likes

Nice comparison, interesting to see how the brown and dark green are quite a bit darker with the lottes mask.

My personal preference (that I’m using in my setup also) is the guest-dr-venom slotmask. I think it remains brightness the best while maintaining that grungy CRT look from normal viewing distance without overdoing it. My personal preference is to keep the slotmask strength between 0.50 and 0.55, any higher it kills the vibrance of “white” in white if you know what I mean, regardless of backlight strength. But personal taste may differ of course :).

Are you using Nestopia or the Mesen core for NES? And which palette setting in these emulators do you find most accurate?

1 Like

You can tweak the Lottes mask to have more contrast and brightness but I just use the default mask settings.

The color palette is composite direct FBX in Nestopia; it’s about as accurate as it gets (to intended colors) as far as I know.

http://www.firebrandx.com/nespalette.html

1 Like

Thanks, also for the link.

From reading the page I understand the composite direct has been surpassed by his Smooth (FBX) palette.

I find the bolded part in his comment on the composite direct palette a bit odd though:

This is a pure, unmodified direct-capture of the composite output of the front-loader NTSC NES. It’s intended for posterity and is a good all-around versital palette. Can be used on digital or analog displays, but is not the most accurate experience. It is however, more faithful to ‘intended colors’ than what eventually shows up on a CRT screen with original NES hardware.

On second reading I’m not really sure what he trying to say here. There’s also no further explanation on what “direct capture” actually means? Given this, and the fact that we’re using grade on top of the palette it may not be the most accurate for our use case(?)

Anyway I have no alternative myself, and the palette does look quite OK, so I’ll be using it for a bit to see how it pans out with different games.

@Dogway I would be interested to know your view on what palette your preferred one is, also given the color transformations grade is doing. Or if I would put it backwards, if I have grade set to use sRGB space and NTSC-J phosphors and whitepoint at 75K or 93K, what palette in Mesen or Nestopia would you advise?

2 Likes

IIRC, his capture method was to run NES composite into a Framemeister which output to an HDMI capture card and then he ran a ‘colors’ test ROM that switched through the palette colors fullscreen when you press a button.

Then, he took that capture and sampled each color a bunch of times and averaged(?) them to get the “true” color.

I don’t know if he was able to ensure that the capture card and/or the Framemeister was outputting calibrated colors.

The Smooth palette is just the captured palette with some of the colors tweaked by eye, I think, which makes it no better than any other random palette, IMO (assuming I’m correct on how it was made).

2 Likes

I never gave it much thought and used “Smooth (FBX)”, but I guess since I’ m already doing all the color work the direct composite direct should be the way to go. I’m also emulating composite but the change should be negligible if any, after all we are clipping and you can’t clip anything that isn’t there… Maybe Original Hardware is also an option, I don’t know the difference between them so I can’t tell.

2 Likes