[Feature Request] Automatic material instancing (copy-on-write)

Hi there,

currently, it’s a little bit awkward to handle parameterized materials. Let’s say you have a basic material like ‘M_plastic_master’ with parameters for base color, (texture and normal)-scale, and maybe a static switch like ‘scratched’ or something.

The very cool thing about such a material is, that you can use it many times in different meshes in different versions without additional compiliation or memory cost.

But in practise, this is quite complicated:

  • Assign material
  • Seing the scale or the color isn’t quite right for this mesh
  • Switching to content browser, browse to the material master
  • Create an instance (and move it to the right place)
  • Configure it
  • Switch back to static mesh editor
  • Assign this new material
  • (Repeat for each material which isn’t already perfectly configured for this particular mesh)

It would be EXTREMELY helpful, it just could work like this instead:

  • Click on expand icon (or similar) after each assigned material
  • (List gets expanded, showing the editable parameters of this material
  • If the user make changes, silently create and assign a new material instance in the background (not shown in the content browser) and save it together with this mesh (just like collisions and other settings)
  • All changes should instantly be visible (like it’s already the case with all material instances)


With this workflow, you could now just assign your base materials and configure them right away which would not only be much easier but also leaps ahead in terms of speed. If there is already a material instance assigned, you could either directly manipulate it (which affects ALL meshes using this instance) or directly creating a copy individually for this mesh. The other way around it should be possible to save a copy of this instance if you want to use it for other meshes, too.

Another thing:

When I first tried to changed a material parameter with blueprint I almost went crazy because it simply had no effect.
Why? Because I had to create a dynamic material instance reference in the construction script first and re-assign that to the mesh first. It would be very helpful, if the engine could do this automatically when you access a parameter of a material the first time, making this process completely transparent for the user.

So, basically, UE4 should ONLY use material instances in the background. :slight_smile:

Many thanks and keep on the great work,

1 Like

Hmm, until now I got absolutely no reaction at all, it’s the same with all other ones (with one exception which ‘was already suggested before’. Is someone even reading this…?

1 Like

Another friendly bump.

Hmm, ok… Was hoping for at least some kind of reaction.

Hey it is unfortunate that this was not picked up by anyone from Epic. We had a similar workflow concern and I have raised this with Epic elsewhere. Will let you know once I hear back from them :slight_smile:

1 Like

Many thanks, so not all hope is lost… :wink:

Ok, now all hope is lost.