← All ideas
  • Published 6 Jan 2022

Material System (Material Instance)

I want to discuss on an idea call Material Instance (or Variation or whatever fits), and would like to know how others think about this

So in my Opinion, Blender Material System is nice, but it could be improved in my opinion,


Problems

Here are the problem I want to address

Messy Catagorization / Long Material Name as Identifier

  • All Materials Are Lumped together in One Giant List, there is no way to categorize them, which turn it into a Gigantic Mess of list.
  • The only way to Categorize or Identify the Material is by using Long Descriptive Name, and use search function to find them.

Duplicated Similar Material

  • To make variation of similar material, the only way to do it is to Duplicate them, which will make it really hard to manage, in terms of tweaking the material, and it makes the material list even bigger

Possible Solution Idea

There are many possible ways to solve this problem, A way that I personally think can solve this problem is the idea of Material Instance (or whatever you call it)

There are Two Intended Problem to solve with this Idea

  • To Scope the Material so You don't need to face the Gigantic Material List Everytime and Memorize the name for the specific Material for this object
  • To Reduce Material Duplication

Material System Proposal

Currently, The Materials in Blender is like a "Global Variable" in coding, where everything is available everywhere, To Solve this problem, the Idea is to Scope them and put into Groups

Master Material

This is just the regular material You know and love. It have Node Tree and you can do Your Node Magic in here. However, theres one addition to this, Which is making "Group Input" Work on Material Space

This is basicly Similar to Geometry Node, You make your node tree, and Choose what Property you want to Expose, using the "Group Input Node".

Material Instance

Material Instance will be Store in Master Material (Or other places whichever works) in a List Form

The Material Instance will be the Same As Master Material, Except the Parameter that is Expose from Group Input Node will be inside of Material Instance

This way, You can do something like this

Master Material 01: Principled Shader Material
   -Instance 01: Red Shiny Material
   -Instance 02: Blue Rough Material

Master Material 02: Fancy NPR Material
   -Instance 01: Fancy NPR Style 1
   -Instance 02: Fancy NPR Style 2

Differences

What are the differences between Master Material? So Master Material is the Material with the Node Tree, you add a Group Input to it

Material Instance is a Variation of the Master Material that have it's own Setting (determined by Group Info)

Setting Materials

When Selecting Material, First You Select the Master Material, and then You select the Material Instance

This will Drastically Reduce the amount of Duplicated Material making things more organized, and easier to work with material variation

Think "Select a Material" and then "Select the Material Variation / Instance"

When you want to have a fundalmental change, All you need is to edit the master material, and the instances will inherit them

Mockup

UIProposal.png

Properties Panel UI

It would be great if you can show the Group Input inside here, so the maker of material can decide which parameter to expose, (Similar to Geometry Nodes)

Perhaps a Tabs to Switch between the Old UI and the Exposed Input Group UI

Extras

This is probably Nice but I don't think is important, which is the ability to Overwrite the "Group Input Property" on object level, a On/Off button next the the parameter would be nice. However I think this is more of a Nice to Have

How do you guys think? Agree? Disagree? More Idea to Throw in? Would It work? Would it Create more problem than it solves?

100%

Development Status: Open

Upvote 12 Downvote 0
blenderboi2018
6 Jan 2022

3 Comments

thinsoldier

This has to already be under deep discussion somewhere in the community. Does anyone know where?

1
blenderboi2018 Author

I want to know as well

Draise

A bit like instancing materials in Unreal Engine? I'm all for this! You can kinda already do this with custom attributes in the object, each driving the same material, but it's a little clunky to setup. if there were a quick way to instance or link the attributes per object, then it would be possible.