Making Dithered Silkscreens

So I've been looking at various PCB designs and seeing bloody traces when I close my eyes over the past few weeks. But the one thing that caught my attention is the amount of effort that goes into silkscreen design!

You've got boards like this

Which are perfectly functional and useful. Then you have the hotshot hacker with their nice bitmapped logo, like this

Looking pretty cool, but why not go bigger?

Now we're talking! Full size, but shame we are limited to two colours! If only there was some way to get around the stark silkscreen on soldermask contrast!

Dithering and Halftone

Take a look at this image, it's composed entirely of pure black and pure white

Neat right? Turns out if you use weighted randomness and the fact that the human eye blends light (like the impressionists used in their paintings) you can simulate gradations. This technique was abused with early games/graphics on limited hardware (and works rather well once you add various colour dimensions). For the purposes of silkscreen layers let's just assuming you're working with a single layer and dot-size is not an option (otherwise we could use halftones!).
So the first thing we need to know is what the quality of the inkjet being used for adding our silks is. Getting in contact with a representative of the fab being used should be able to give us some sort of info.

So we do some quick math, this printer can do about 170 DPI, for a 180x100mm board we should be using a source image resized to 1200x677px. So if we run off and do that, then dither our image using GIMP, Some package off github or this online tool it should be able to be imported at a scale workable for the printer (and hopefully avoid any horrid scalers along it might encounter along the way).

So this image

Becomes something like this, neato eh?

All that's left to do is whack it into KiCads bitmap importer, set the DPI to what the printer is capable of and line everything up! A word of caution, some large silks will make the 3d renderer hang. These images are best added as a last step in the design process. Also, trimming the excess that overhangs the board may be of use if memory usage starts to become a problem. One more thing, flip your image horizontally if it's going on the rear side of the board, KiCad won't translate non-text elements.

Now ship it off to fab, wait a bit, and...

Bob's your uncle!