Retro TV shader
This shader simulates a retro CRT TV with or without scanlines. The shader original is coded by a youtuber named “LetsGameDev”. Check out his channel: https://www.youtube.com/user/Tomzalat
Shader code
//---CRT Shader---
shader_type canvas_item;
uniform float scanline_count : hint_range(0, 1800) = 50.0;
vec2 uv_curve(vec2 uv)
{
uv = (uv - 0.5) * 2.0;
//You can modify the numbers and try different values
uv.x *= 1.0 + pow(abs(uv.y) / 3.0, 2.0);
uv.y *= 1.0 + pow(abs(uv.x) / 3.0, 2.0);
//The scale part (you can delete it when you want)
uv /= 1.2;
uv = (uv/2.0) + 0.5;
return uv;
}
void fragment()
{
float PI = 3.14159;
//You can modify the *3.0, *-3.0 for a bigger or smaller
float r = texture(SCREEN_TEXTURE, uv_curve(SCREEN_UV) + vec2(SCREEN_PIXEL_SIZE.x*0.0), 0.0).r;
float g = texture(SCREEN_TEXTURE, uv_curve(SCREEN_UV) + vec2(SCREEN_PIXEL_SIZE.x*3.0), 0.0).g;
float b = texture(SCREEN_TEXTURE, uv_curve(SCREEN_UV) + vec2(SCREEN_PIXEL_SIZE.x*-3.0), 0.0).b;
//If you dont want scanlines you can just delete this part
float s = sin(uv_curve(SCREEN_UV).y * scanline_count * PI * 2.0);
s = (s * 0.5 + 0.5) * 0.9 + 0.1;
vec4 scan_line = vec4(vec3(pow(s, 0.25)), 1.0);
COLOR = vec4(r, g, b, 1.0) * scan_line;
}
Wow, this is an amazing shader, Just one question, I implemented it into my game, I want to reduce to lens distortion effect ( fish eye lens), but while looking through the shader code, I couldn’t find how to change this effect. Is there a value that I can change to reduce this effect? Thanks again for the amazing shader. 🙂
change this values
vec2 uv_curve(vec2 uv)
{
uv = (uv – 0.5) * 2.5;
//You can modify the numbers and try different values
uv.x *= 1.0 + pow(abs(uv.y) / 3.0, 5.0);
uv.y *= 1.0 + pow(abs(uv.x) / 3.0, 5.0);
To be able to use this shader on Godot 4.x it is necessary to delete the line:
float PI = 3.14159;
And Add in second line of file:
uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap;