For a long time I wanted to try and make some blinking lights.

"What's so special about that?" I hear you say. Well, you see - real server racks or nuclear power plant control consoles don't blink completely randomly. There's intricate relationships between individual lights, rows of lights, entire racks... and the time factor.

I have created a texture storing 256 different patters. Special UV layout + vertex colors + of course a special shader and we can have this:

#techArt #Godot #server

@liblast four data channels? I assume you made it taller for visibility?
@efi yes, every row of pixels is stretched to 4 pixels here, for the sake of convenience, and also giving some leeway to artists. Otherwise, texture filtering might cause inter-row bleed which could turn blinking into wandering. I do want to use linear filtering to smooth out the motion, though. The shader has a parameter to apply a harden the threshold to make blinking more snappy. I'm really happy with the result!
@liblast it is a very interesting idea and if I ever need a 60s computer model I'll remember this =3

@liblast Thanks for showing the texture. Interesting technique.

Loving the attention to detail

@h2n0 thanks! I should probably show the shader code as well. It's already on Codeberg in the devel-unfa branch in case anybody wants to read it. The file is called "blinker_shader.gshader".
@liblast very elegant solution! does the loop become detectable at some point?
@frankiezafe any single light will loop (not necessarily noticeably) but the whole composition will never repeat exactly the same because every single light has a different time scale so they are out of sync. Groups of lights could be made to blink in sync (just set the same U coordinate in the UVs). Also: the texture isbdivided into different slices using different patterns, there are also some very simple ones in the red channel on the top - simple 50%, 25% and 12.5% duty cycle pulse.
@liblast definitively elegant ⊱꒰꒩ ᜂ ꒩꒱⊰