There is also the potential to use _MeshOutline, but it’s really tricky because it’s actual lines and I can’t really think of an easy way to achieve foreground/background and let the lines cut each other nicely in an automated way, do you draw rays from camera location to sample points inside the curve region and cross check to see if the ray get blocked by any other curve region? That seems computationally intensive. Plus actual lines require actual layers to stay on, tricky to update automatically, require baking, etc. I guess you can get away that by using custom display in grasshopper, Human plugin let you control lineweight for example.
I’ve also recently found out about sub-surface being able to be assigned materials individually, see this post, but seems to have a lot of limitations right now. I still don’t like it being destructive, but at least easier to automate, as long as material assignment stay put after _Join and _BooleanUnion, right now they don’t.