Ok, maybe I misled you with my description of ".8 setgray".
All colors in PostScript are completely solid, 100% opaque colors. If you lay down a solid red, and then print an "80% gray" rectangle on top of it, you will NOT see any red "showing through" the gray. The gray is a single solid color of a shade that is 80% black.
How the output device chooses to build a color that is 80% of a solid black tint is up to the output device. Most achieve a grayscale effect by altering, not the number of dots printed, but the size of them. And if the PostScript interpreter sees that a red patch is covered by a gray patch, it won't even render the "underlying" red patch.
All of that said, PostScript DOES have both a Pattern fill mechanism and a mask/stencil mechanism. Look up the "imagemask" operator and "Pattern Dictionary" in the PostScript Language Reference Manual.
But the key point here is that colors are solid. If you want to mix red and green to produce yellow, then use
"1 1 0 setrgbolor"
You are specifying SOLID 100% yellow, and if the ouput device is a CMYK device, as most are, it will use big yellow dots to render it. If viewing on a monitor, it will alternate shooting red and green light at the tube to create the optical illusion of yellow... but to PostScript, it's just a single solid color.
If you want a lighter shade, then you could do ".5 .5 0 setrbgcolor", or any other combination to create any other color.
Thomas D. Greer
Providing PostScript & PDF
Training, Development & Consulting