How to share material between meshes

I know this has been asked a lot here. However, I can’t seem to get the hang of it. I instantiate new GameObjects through my code like this

Tile3D clone = null;
Tile3D master = //some method to get a prefab;
if(master != null)
{
    clone = (Tile3D) UnityEngine.Object.Instantiate(master);
    clone.renderer.sharedMaterial = master.renderer.sharedMaterial;
}

Tile3D is a script of mine which contains a few properties important for my game, but does nothing with the renderer or materials. The clones are then added each as a child of a different GameObject. Now when I instantiate a new object, it always creates a new instance of the material. At least that’s what I assume, since the Inspector shows the material name for the new object with an “(Instance)” appended. I also tried it without explicitly assigning the materials, and with a few combinations of material and sharedMaterial on either side. However, nothing I do there seems to have any effect. What do I have to do to use a truly shared material for all my GameObjects?

If you use sharedMaterial then it should not be an (Instance). The only reason I could see there being an (Instance) is if the Tile3D master is using an (Instance) of a material and then sharing that to the clone.