Well, if you were to multiplex one color at a time, you’d only need one resistor on the common lead.
Alternately, you can consider resistor arrays. You can get three resistors (all same value) in a 6pin SIP, six resistors in a 12pin SIP, or eight resistors in a 16pin DIP (though that’s not much smaller than 8 individual resistors.) You’ll have to do some thinking if you want different resistor values for each color. There are SMT versions (SOIC and smaller) as well, but you’re avoiding them. They seem to run about $0.10 per resistor at digikey.
If I multiplex with one resistor per lead, it means I have the same resistor for each colour, which could be a problem if the red washes out the other colours since it has a lower voltage drop. It will make the software more complex too, though that doesn’t rule out the idea.
Maybe what I could do instead is multiplex it without a resistor and use a low duty cycle as each comes on to keep anything from burning out? Or for that matter, select my resistor based on the red LED, and leave the green and blue ones on longer?
In that case, I have enough IO lines to skip the shift register completely and use 11 pins to control the LEDs
What you’re calling resistor arrays is what I called resistor networks in my first post. I hadn’t considered SIP ones though. It might fit. My only concern there is prototyping will be a pain since I can’t easily get them here and shipping from Digikey to Canada can get expensive.