One possibility to get gradient/shading even with only black and white/on and off pixels is dithering, looks like this:
Image from: https://blog.csdn.net/lz0499/article/details/101627042 Equations/algorithm explanation for it at this link too.
I'm not familiar with most engines, but in Godot at least it's not too hard to make a shader, heres a video:
I imagine it would be possible to replace the color limiting stuff in the above vid with the dithering equations to get a dithering filter. Of course you could just use the above color limiting filter to get black and white.
(Posted this in another thread but thought it might be useful for others as its own post.)