Instances and Parameters
Even though the purpose of a Material Instance is to add an inexpensive way to edit the look of a Material, it is important to keep in mind that you are not able to edit every single feature of a material by default. Before a Material Instance is truly editable, you must first select which properties of the original (or master) Material that you want to be editable within the instance, and designate them as parameters. This is called parameterizing your Material.
A parameter is seen as a data node within the Material Editor. Technically, it is a named value that serves as a conduit to send data values into a Material Instance. These parameters are exposed within either the Material Instance Editor or within script (Blueprints or code), and can then be edited. Say, for example, that you want to create a Material whose color can be changed on the fly. Instead of simply assigning a value to the color, such as red, you would instead assign a Vector Parameter to the Material's Base Color property. You would provide a name for that parameter. When you create an instance of this Material, you will find your named Vector Parameter listed in the instance's properties, and through that you may set the color to anything you wish, all without having to recompile.
Here you can see the parameters set up within a Material.
And here we see the resulting exposed parameters within a Material Instance.