That way seems like after the colored carpet is created it would function identically to the current carpets. Or am I not understanding the implementation?
other stuff
It has to do with the properties of graphics hardware. Modern graphics hardware is very, very fast at processing huge data sets (millions of triangles and pixels). However, it is very, very slow at changing the parameters of that processing. The most important of these parameters is the material that is being used.
On "draw call" is of the form "draw this mesh using this material". There are two costs to the draw call. The first is setting it up - a fixed cost having to do with changing to a new mesh and a new material being drawn. The other is actually drawing the stuff, which is a cost that gets larger as the complexity of the mesh/material increases. However, meshes and materials have to be extremely complex before they start slowing down the system. In RimWorld, by far the most important rendering cost is the fixed cost of every draw call. To reduce this cost I actually combine all the non-moving meshes in each 17x17 square of the map into one dynamically as they change, so I can draw them all at once.
The thing with carpets with a color picker is, the only way to implement this is to create a generated material with a color parameter. But then, if the player makes carpets of many different colors, they could force the machine to run a draw call for every different color, which, in bad cases, could destroy your performance.
Anyway - I'll add more carpet colors eventually, I think. Perhaps patterns!
Back to the cheap ideas!