"Retro Game Engine owns the full frame lifecycle." - This is completely meaningless. Your engine controls whatever data is in the buffer that's sent to scanout, but the operating system and the GPU drivers and the scanout hardware in the GPU and the input processing and row/column drivers in the display control everything else.
The only actual screenshots this guy has are some "multiply the image with the subpixel mask" demos that.... don't look anything like a real CRT, and certainly nowhere near modern CRT shaders like CRT Royale.
The rest of the posts in the substack page are similarly devoid of actual content, but very heavy on the AI woo-woo this-is-important-and-deep stylings that I've come to find nauseating.
Hey Author, if you can see this - You're clearly a smart guy, but you need a basic grounding in 3D rendering if you're gonna do weird stuff - more than an AI can give you. In particular, the phrase "Light is linear" will be useful to you. Good luck.
>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?
This one also has a lot of Its not X, its Y type phrasing
A filter is not a game engine and a game engine is not a filter.
Building a custom game engine for CRTs represents a fundamental misunderstanding of how a CRT works and what the responsibility of a game engine is.
>Lighting systems are designed to remain readable under CRT-style color quantization. Sprite and mesh pipelines emphasize bold shapes and strong contrast. Even debugging tools in the engine, like the grid overlays and scene visualization systems, exist partly to help developers maintain spatial clarity and composition.
This is AI nonsense but it could be a summarisation of something real.
We did lose quite a lot when we trasitioned to lcd screens.
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.
My first impressions were that the screen was bright as hell, sharp (but I was torn on whether that was good or bad, given the blockiness that it introduced), thin and light (awesome!), and sucked to run at anything but the native resolution. After a few hours, I realized that my eyes weren't getting tired looking at it, and that it was nice not to have the subtle hum around anymore.
The CRT was a decent screen (for 1999), and the LCD was a decent screen (for 2003). Of course, I just got used to the differences, since the LCD was much more practical in my life. I still have it in storage right now.
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.
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'.
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.
You could build a simulation of the universe, send the frame data to the CRT inside that universe and capture the output of the simulated CRT and show it on the LCD.
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.
https://youtu.be/bC-8y2R6IxI?t=166&si=D6K2v28RIR4bACQ3