I’ve been using OpenRGB for a while to control the RGB LEDs on my home PC and after a Windows 11 24H2 related forced re-install, I wanted to try and have the PC produce the Digital Rain Matrix Code effect on the LEDs.
Possibly because “matrix” is such a common search term when discussing RGB LEDs, I wasn’t able to find a ready made solution.
It seemed the best way to create a shader script, and use the “Shaders” effect in the effects plugin of OpenRGB. The only slight problem was that I know nothing about shader scripts.
With the help of Microsoft Copilot, I was able to create the script below, which for me in my setup works really well, and I’ve chosen to pop it up here to maybe save you some time if you’re looking to do something similar.
// Adjustable parameters
const float rainSpeed = 0.1;
const float speedVariance = 0.15;
const vec3 greenColor = vec3(0, 1.0, 0);
const vec3 whiteColor = vec3(0.04, 1.0, 0.02);
// Threshold for the "head" of the drop
const float headThreshold = 0.02;
vec3 rain(vec2 fragCoord)
{
fragCoord.x -= mod(fragCoord.x, 1.0);
float offset = sin(fragCoord.x * 15.0);
float variation = (cos(fragCoord.x * 3.0) + 1.0) * 0.5;
float speed = rainSpeed + variation * speedVariance;
float y = fract(fragCoord.y / iResolution.y + iTime * speed + offset);
// If y is near the top, use white; otherwise, use green
vec3 color = (y < headThreshold) ? whiteColor : greenColor;
return color / (y * 40.0);
}
void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
fragColor = vec4(rain(fragCoord), 1.0);
}