I'll do my best to answer your questions.
1/ There are currently never more than 12 instances at one time, the co-routine only ever runs once on startup (so can run simultaneously for up to 12 instances) and then after that only if modifications are made by the player which can only ever effect one instance at a time.
2/One instance takes less than 0.2sec on a mediocre PC, but up to 1.5 sec on an iPhone 5S, or thereabouts.
3/As mentioned in the first answer, up to 12 simultaneously on start, and no more than once when players make changes after.
4/ I never use sharedMaterial as I want to keep the instances unique. Although I do use renderer.materials [] as there are more than one material ID that I'm applying to.
void ApplyLODTextures()
{
Texture SpecTrans = ProceduralBody.GetGeneratedTexture("Substance1_Specular");
Texture Diffuse = ProceduralBody.GetGeneratedTexture("Substance1_Diffuse");
Texture Normal = ProceduralBody.GetGeneratedTexture("Substance1_Normal");
for (int i = 0; i < 4; i++)
{
if (i > 0)
{
LODs.materials[0].SetTexture("_Diffuse", Diffuse);
LODs.materials[0].SetTexture("_Normal", Normal);
}
if (i != 3)
{
LODs.materials[1].SetTexture("_SpecTrans", SpecTrans);
LODs.materials[1].SetTexture("_Diffuse", Diffuse);
}
}
}
5/ My substances are set to "Build on level load and cache".
Hope that helps, thanks.