Generally speaking 1 ISMc = 1 material but:
-
you could leverage Custom Primitive Data to make each instance of the ISM look different. Example. The technique is very efficient but it has its limits. If the materials are fully procedural, the possibilities are almost limitless. But you cannot really dynamically feed instances texture samples, only raw float data.
-
you could have many ISMc - as many as there are materials. To “change the material”, you’d remove a mesh instance from one ISMc and add it to another ISMc. The material change would be automatic. You can absolutely combine it with the Custom Primitive Data. Think of it as of a Tile Manager actor that creates a bunch of (dynamic) materials, and handles many ISMc.
-
and finally, have a single ISMc. When an instance tile is interacted with, you remove that instance and replace it with a static mesh.