I've wondered if we could create something like a "model container". It could be used mainly for organization where you want to put a bunch of models into sort of a folder. A container would not be a renderable object it would just pass the effect down to all it's members. Containers could be nested also.
"Model Container" is a good name for this and is what I was trying to describe.
The complexity comes in how to "pass it down". There are several options I've been bouncing back and forth in my head:
1) Make the container a renderable object so it WOULD get it's own render thread and for each frame, it would render the effect on each models buffer, etc... The complexity of this is around the mutex locking. Right now, the rendering of a model is on it's own thread so it can avoid a bunch of locking scenarios as it knows it's the only thread rendering that model. As soon as another thread (or many threads if in many containers) could also render to that model, I need to add much better locking. Also, the effects that need to save some state from frame to frame may need to make sure the state is per-thread or something (or have separate RenderBuffer objects for each model on the different threads, but that then sucks up memory... 64bit windows anyone?).
2) At render initialization time, copy the EffectLayers (or really just the pointer to the EffectLayer) into the models RenderJob object. If the "Container" is before the model, they are copied to the bottom of the models stack. If it is after, it is added above. Thus, when the model is rendered it has ALL of the layers it needs. This is simpler for the rendering engine changes. HOWEVER, it won't work well with the existing model groups as the rendering "order" of the container wouldn't be considered at all.
I WANT to do #1, but I'm semi-scared of the instability I'm going to cause by going that direction.

Luckily it's only January.