← All ideas

Reusable Shader System

Basically, imagine you have a model but different parts of these model use different materials, and most of these materials are variations of one, variations of metal, variations of skin, of glass, holograms, anything.

For that you'd have to setup the shaderwork for all the materials individually, so people usually do it once, assumes it is finished and copy all the nodes to the next material and tweak the settings.

This is not a good workflow because:

a) It's destructive (what if I find out there is more I can do on the shader? I'll have to change it in every variation I have manually and probably screw up in one or the other or recopy all over again)

b) Can be lazier, that's too much work for something
that should be simple

c) Not performant (blender have to rethink all of those nodeworks again and again and again as if they were something new of course)

My proposal is to separate material workflow from shader workflow, allowing me to choose from a simple dropdown list a shader (node graph setup) I want the material to use as It's core (so I could set this very same shader to any and every material I want with just 1 or 2 clicks). Also, naturally, decide it shader parameters (value, color, gradients, sliders, textures, etc) I want to expose to the properties panel so they can be changed per material from variation to variation

Reference:

  • Unreal Engine's Master Material - Material Instance workflow
  • Unity's Shader - Material workflow.
100%

Development Status: Open

Upvote 3 Downvote 0
FGPArthurVII
26 Oct 2023

5 Comments

GabrielMoro

I've seem the team talking about using the same Geometry Nodes workflow with materials and I'd LOVE that. Imagine being able to expose just the UVs on the "Side Panel" level and be able to reuse the same shader without having to create a new material. Would love that (for many other instances like simple color changes etc).

1
jeroenbakker

In Blender mindset you would use node groups. In the future there would be more flexibility with texture layering.

1
zuorion

In Blender mindset you would use node groups.

But thats crime against performance. In node groups setup every material will endup as separate shader.

thorn

For cases like this I use a base shader for my materials, with various nodes using a random factor within a set range of values. This means I can get a wide range of variations in each object, with only applying one shader to all of them.

Lauloque

Most materials nowadays are a principled shader, it's the default when you create a new material, and it's not something hard to replicate. If you need something else and want to reuse it, use node groups.

I'm not sure to understand what you propose in addition to that.