I had a material (not procedural) reference, which I was tweaking before I would apply it to other objects.
I found that applying the material to an object “creates” the instance I was looking for.
So the proper process is :
assign the material to an object (say the first you want to have an
individual look)
reference the assigned material
(putting it in a List for example)
assign the referenced material to any other object that is supposed to
share the same material tweak the reference as you like
I was trying to instantiate the material before I would assign it.
It now works as I want, with pretty good performances.
You can instantiate substances at runtime using renderer.material instead of renderer.Sharedmaterial, Instanciate should not be used with procedural materials.
ProceduralMaterial Instance = GameObject.renderer.material as ProceduralMaterial;
This will instanciate dynamically a new copy “Instance” of the procedural material applied to GameObject.