New CRT shader from Guest + CRT Guest Advanced updates

It’s a composite phase?

1 phase of the composite signal looks like this with sharpening and everything:

(and with beetle-pce composite palette, good example of a radical difference it makes with the water here)

4 Likes

Your crt-shader and your knowledge are sensational.

Thank you very much for your dedication that helps to raise the level of perfection in emulation.

7 Likes

It’s a different challenge with ‘gdv’, namely to be able to utilize many options in the same way as in the regular version while still retaining the ntsc character, especially coloring and artifacting. It’s nearly finished now. :grinning:

4 Likes

Now we just need to figure out an audio pass that has a parental figure yell “You’re sitting too close to the TV!” or “Turn that thing off and go outside!”

5 Likes

New Release Version (2021-06-15-r1):

Notable changes:

  • New scanline spike removal code, faster and nicer, more fluid scanlines.
  • Scanline type 2 falloff correcture.
  • Very nice downsampling options added.
  • Some spedup.
  • NTSC version overhaul.
  • Improved scanline deconvergence.
  • Better performance with interlacing.
  • Deconvergence adapted for non standard presets.
  • Probably some more stuff.

Download link:

https://mega.nz/file/s0wExKaZ#fXhYzve299uorU81lFupC7TgS7eeolNM8cWM_5VBzDY

Feedback is welcome as there are many changes, hopefully no regressions.

12 Likes

A post was merged into an existing topic: Mega Preset Assembler

Does this look right? Seems like magenta was stronger in the example screenshot you posted.

scanline deconvergence 1.00

scanline deconvergence -1.00

2 Likes

72fps vs 65fps before same parameters on my HD4000 here.
Yeah my GTX770 just died… :persevere:

2 Likes

RIP your card and now your wallet

1 Like

It’s a new implementation, definitely more consistent on thinner scanlines. The default strength on normal scanlines is sortoff a new deal, should be around the same as before, but not stronger.

3 Likes

The Sonic waterfall transparency is gone in the new NTSC version.

1 Like

Same here.
And with the new “custom” parameter of the ntsc shader, you can see that fringing isn’t really making a big difference when pushed high.
There’s always some problems with changing the ntsc passes resolutions. :slightly_frowning_face:

1 Like

For ‘old’ look the ‘Prescale-X Factor’ can be set to 2.0, transparency should get a better treatment.

Meanwhile i also improved the ntsc composition and the second ntsc pass outputs to 2x native resolution, but from a better perspective filtering still got priority.

2 Likes

New Release Version (2021-06-16-r1):

Notable changes:

  • New scanline spike removal code, faster and nicer, more fluid scanlines.
  • Scanline type 2 falloff correcture.
  • Very nice downsampling options added.
  • Some spedup.
  • NTSC version overhaul.
  • Improved scanline deconvergence.
  • Better performance with interlacing.
  • Deconvergence adapted for non standard presets.
  • Probably some more stuff.
  • Edit: nicer NTSC preset.
  • Edit: polishing of scanline type 2.0 and scanline deconvergence.

Download link:

https://mega.nz/file/9kxWjIDB#VWXh76-DUHmfjx_bTc3xuXKc9CqPfmsAeaZ16u0dYWI

The feedback was a bit modest, but stil useful. :grin:

12 Likes

Example of the new ntsc preset:

5 Likes

Can I ask what the native resolution of your monitor is?

1 Like

It’s an 2560x1440 IPS monitor. Sometimes i make windowed screenshots because of the reduced filesize.

2 Likes

@guest.r

I’m not sure why this doesn’t work; some kind of syntax error.

In case it’s not obvious, I’m trying to do yellow, purple, blue, green because I have GRB subpixels.

New version of GDV is working great btw. :slight_smile:

Also, is there documentation for GDV somewhere? I’m curious about the CRT color profiles.

// 4k mask
	else 
	{
		mask = vec3(mc);
		pos.x = fract(pos.x * 0.25);
		if      (pos.x < 0.2)  mask.rg  = 1.0.xx;
		else if (pos.x < 0.4)  mask.rb = 1.0.xx;
		else if (pos.x < 0.7)  mask.b = 1.0.;	
		else                   mask.g  = 1.0;	
	}
2 Likes

else if (pos.x < 0.7) mask.b = 1.0.;

The extra dot after 1.0 looks suspicious. :wink:

Dr. Venom made a very nice job producing and documenting these:

"CRT Colors" for CRT-Guest-Dr-Venom  -- Additional information.

3 x spec
2 x calibration

Specifications for three standards

1. EBU Standard Phosphors
// Amongst others used in Sony BVMs and Higher-end PVMs
// Tolerances are described in the E.B.U. standard reference document "E.B.U. standard for chromaticity tolerances for studio monitors" tech-3213-E.
// PVM-1440QM service manual quotes 0.01 as tolerance on the RGB CIE coordinates. 

xb0 = "150.000000"
xg0 = "290.000000"
xr0 = "640.000000"
yb0 = "60.000000"
yg0 = "600.000000"
yr0 = "330.000000"

Whitepoint is D65

X 95,04  --> Xw0 950.4
Y 100    --> Yw0 1000
Z 108,88 --> Zw0 1088.8

2. P22 Phosphors 
// These phosphors are often quoted as the "default" phosphors used in CRTs 
// Also used in lower-end PVMs, see Sony PVM-20M4E 20M2E Colour Video Monitor.pdf
// These can still be bought :-)  https://www.phosphor-technology.com/crt-phosphors/  -- includes CIE coordinates.

xb0 = "148.000000"
xg0 = "310.000000"
xr0 = "647.000000"
yb0 = "62.000000"
yg0 = "594.000000"
yr0 = "343.000000"

3. SMPTE-C
// Spec for most of America.
// I have forgone on the 1953 NTSC standard, as apart from very few early color TV's the 1953 NTSC standard was never actually used. Instead less saturated primaries were used to achieve brighter screens.
// Taken from the WIKI on NTSC (https://en.wikipedia.org/wiki/NTSC) In 1968-69 the Conrac Corp., working with RCA, defined a set of controlled phosphors for use in broadcast color picture video monitors. This specification survives today as the SMPTE "C" phosphor specification: 

xb0 = "155.000000"
xg0 = "310.000000"
xr0 = "630.000000"
yb0 = "70.000000"
yg0 = "595.000000"
yr0 = "340.000000"

Whitepoint is D65

X 95,04  --> Xw0 950.4
Y 100    --> Yw0 1000
Z 108,88 --> Zw0 1088.8


4. Calibrated profile for Philips CRT monitors. Of course an approximation, but I'm pleased with the "quite accurate" results.
// Manually calibrated and compared to real Philips based CRT monitors, running side by side with the shader on a 10-bit DCI-P3 gamut panel. This calibrated CRT profile covers amongst others Philips CM8533, Philips VS-0080, and Commodore 1084.
// Note the whitepoint is significantly different from D65. It's closer to 6100K, but clearly not on the blackbody curve. Possibly an ISO-line target, given the slight hue on the whitepoint. Other than that it could be aging / whitepoint drift. I compared four CRT monitors, one of them in very mint condition, and they all have this slight hue on the whitepoint, so I would guess this is how they came out of the factory. But then again since these things are now getting close to 30 years old, who knows? Either way the profile should be good: factory out or true to life aged CRTs... :D.   
// It's important this specific whitepoint is used in the shader or the colors will not be accurate.
// Also it's important to note that this profile should be used with "Gamma Out" at 2.25 or the colors will be less accurate.

xb0 = "154.000000"
xg0 = "300.000000"
xr0 = "635.000000"
yb0 = "60.000000"
yg0 = "620.000000"
yr0 = "339.000000"

Whitepoint:
Xw0 = "910.000000"
Yw0 = "1000.000000"
Zw0 = "960.000000"


5. Calibrated profile for Sony Trinitron Monitor. 
// In a similar fashion as the Philips CRT based profile, this is a manually calibrated profile for a Sony Trinitron monitor, model KX-14CP1.
// This monitor uses a Whitepoint that is close to 9300K. The Z value in the calibration process has been raised to the point where the "blue-ishness" of the white matches. To achieve further 9300K white, I guess one has to raise the hardware whitepoint of the host PC monitor...
// It's important this specific whitepoint is used in the shader or the colors will not be accurate.
// Also it's important to note that this profile should be used with "Gamma Out" at 2.25 or the colors will be less accurate.

xb0 = "152.000000"
xg0 = "279.000000"
xr0 = "647.000000"
yb0 = "60.000000"
yg0 = "635.000000"
yr0 = "335.000000"

Whitepoint:
Xw0 = "903.000000"
Yw0 = "1000.000000"
Zw0 = "1185.000000" 

Reference is the readme file in the /guest folder, also included with newer versions.

4 Likes

see, this is why I don’t do code lol. Thanks for the help!

2 Likes