Related to that, people have started using old procedural generation tricks to store "large" amounts of data on-chain. For example, as far as I understand it, Aavegotchi [1] stores base layer SVGs, metadata and functions to use these and render the actual end-product at view-time.
Blockchain constraints are eerily reminiscent of the demoscene [2][3][4] (just using the opportunity to share stuff I like, don't mind it).