Here’s an entertaining video showing the difference in retro games on crt and lcd screens. It’s pretty incredible if you aren’t aware. Games back then were designed on CRTs and can look awful on LCDs in comparison.
>But a CRT isn’t a camera filming the world. Its a physical device that generates an image as an output of physical process. [...] That’s not a post-process overlay or filter effect, its an entirely different mental model of what it means to draw or render an image. I think this is why I struggled when trying to bolt this onto a modern engine. The foundations between the two models is just so fundamentally different. At this point, I was already beginning to consider my options. I was half inclined to give up.
An LCD or an OLED are also not cameras. I honestly don't understand what insight this person believes they've stumbled upon.
This is also very mystifying:
>The frame is never a single instant, its a culmination of integrations over time.
Strictly speaking, a CRT doesn't understand frames. It just fires whatever intensity of electrons is indicated by an analog signal at any given time as the magnets steer the beam across the screen in whatever pattern has been designed into them. If the tube is controlled by a digital source, there will likely be some kind of framebuffer of some size somewhere on the pipeline that stores at least a full scanline, and nowadays invariably a complete frame, so a DAC can convert the values in it to the analog signal expected by the gun.
The entire article supposedly addresses the "why", but after getting to the end, I still don't understand the why. What's wrong with Unity or Unreal architecturally that this guy's engine addresses?
We did lose quite a lot when we trasitioned to lcd screens.
LCDs that were just constantly lit were so much easier on the eyes than a CRT where every bright pixel is flashing at 60Hz.
But one thing is true: a low res game designed to look good on a CRT looks much worse on a low res LCD. CRTs being a blurry mess gave you free 'antialiasing'.
And then they got BIGGER.
- The screen size. Going from a 17” or maybe 19” CRT at home to a 19” LCD but without the CRT bezel — the screen looked HUGE.
- The clarity and flatness. The lack of smudging on text, the consistent geometry, being able to see the screen edge right up to the bezel without any wasted space (which you often had on a CRT if you wanted an image without excessive pincushion / bulge).
- The relative lack of ghosting when compared to laptop LCD screens I’d used in the past.
- The colour gamut. Looking back I think those monitors I first saw were relatively wide gamut monitors being used with Windows XP and no colour profiles. The colour saturation was impressive (not accurate, but striking).
I never remember CRTs looking better than any desktop LCD from that point on overall, but I dare say I just didn’t have access to any high-end CRTs at the time.
I also never remember CRTs having true black levels close to OLED, which is another thing I hear people say sometimes. I mean you could get deep blacks, but you’d be sacrificing brightness and white/gray detail at the white end. Again though might have just been the CRTs I knew of at the time.
You reminded me of something I had forgotten though — remember when 100Hz / 120Hz TVs first became a thing? That I noticed!
I think most of my PC CRTs ran at 72Hz / 75Hz IIRC. At least with the monitor I had I remember pushing it to 90Hz but that would add bluriness / lose clarity so I never used it at that rate.
I do remember playing some NES games on emulators on LED screens and thinking the weather effects and such looked pretty bad compared to the CRT experience I remembered, but hadn't gone much deeper than that. I'll have to try and find a CRT and do some tests
However, I have not tried, so I cannot verify that claim to 100% accuracy. The author ...might have tried? They definitely surveyed the landscape. My read of the article was that they went down this rabbit hole and back-justified it instead of investing a similar amount of time in a practical solution in a modern engine.
CRT look and feel is a niche full of very passionate and opinionated people.
The basic idea was to use a chain of Viewports and TextureRects using the previous ViewportTexture to do the effect. This is essentially just setting up a chain of framebuffers that I can draw on top of at each step. The first step just does a simple calculation to convert the incoming color to an "energy" value with a simple shader on the whole frame. Then there are two decay viewports that feed each other to decay the old frame and overlay the new one. These just have a decay parameter that I can tweak to get different effects. There's a final Viewport that supersamples everything because I'm going for more of a vector display look than a CRT. And I can layer on other effects at either the energy state (like decaying phoshpor) or at the final stage (like flicker or screen curve).
Here I've exaggerated the decay quite a bit so you can see the effect. https://www.youtube.com/watch?v=2ZrvcZIfqOI The trails there are entirely from this effect. I'm only rendering the spinning figure. You can also see where lines overlap they are brighter than the surrounding lines because I cap the maximum energy value in the first layer.
As an example, I will quote the article:
> Retro Game Engine owns the full frame lifecycle. I decide what the input signals are, what the display does with it, how time affects it, what gets presented and when.
You can replace "Retro Game Engine" in that sentence with "Unity" or "Godot" and it is just as true.