Main Menu

Instanced nodes in materials

Started by andy.engelkemier, March 06, 2020, 08:47:36 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

andy.engelkemier

If you create a multi material, you can sort of instance a node.....but only within that multi material.

So one graphic controls 6 different color options for graphics? Just use the same map. Great.
But I'd like to be able to group a section and name an instance.

For exampe: I have a texture node for opacity of a label. But that same texture also is used as bump map, but has to get combined with a little bit of distressing, so I'll have maybe a scratch node and maybe some noise composited in there. Well, not for bump map because we're limited terribly there, but you get the idea. I have a small network for one item. And I have the same group of nodes on a different multi-material. Great! Now I have to remember to copy and paste those to the other multi-material. 

I'd like to select those, and group them as an instance. It should show that it's an instanced group. You should be able to change the instance anywhere it's used, but it would mirror the changes wherever it's used. And you could just right click, make unique, to get rid of it as being linked.

It may be slightly complex/advanced for some users, so just be sure you have to do it on purpose. Realistically, if you can navigate the material graph, you should be able to grasp instancing.

mattjgerard

I think simply what you are asking for is folder level Node organization, or being able to collapse node groups, then be able to duplicate and reuse those node groups?

If so, yes, this would be great for complex materials, it would make it a lot easier to understand and deconstruct someone elses materials, and also like you said manage and work with multimaterials.

I would +1 this for sure.

andy.engelkemier

Yes, to the things you said, but Also instanced Between materials. In some 3D software, materials exist outside of their parent. So if you delete the model (I'm guessing that's the parent in keyshot?) then the material still exists. All of the nodes Also exist at the same time. So if I use a collection of nodes in my Red material, and use that same collection in my Black material, then they are linked.
Maya is a great example of this. All of the material nodes exist in the scene tree. The Downside to that is actually, it's difficult to know if a node is shared (actually it's pretty easy there but you have to know to check).

What I am proposing is creating a special group that causes that collection of nodes to act as an instance. This way, you would be telling keyshot to share that group with any other material that asks for it. Think grouping nodes in blender in terms of visibility. It is visibly a group, but you get to see the whole thing uncollapsed as well. I think that would resonate well with most keyshot workflows.

One big reason I want this is multi materials. Often times I'll get a model set where I have a main body color that shifts. But it Some variations a few pieces that are Sometimes body color are chrome, or some sort of metal look. So now I have to duplicate the multimaterial, and add in chrome. And then in each studio I have to be sure that both multimaterials Match. And if graphics change half way through that setup? It can compound quite easily into something that is difficult to track.

So I would set that up the multi material. Then for the special objects that have Sometimes chrome, it would have  a multimaterial where One of the materials IS a multimaterial. If it's not chrome, or stainless, then it's whatever the other multimaterial is set as.

The same could apply for textures. Maybe you have everything as some generic texture you made, or it's glossy. That's pretty common. But then your client/boss says "No, you gotta be sure this one is this moldtech pattern." Great, now you have to find all of those materials and make sure they are using the same pattern. OR, if you would have just copied an instance of your pattern, then anything you do in that group will be mirrored on all 15 materials that used the same one.

This wouldn't be an Easy implementation in keyshot I'm sure. But it would definitely speed up changes for sure, and help reduce human error. No more, "oops, I forgot to change that one"

mattjgerard

Yeah, I get what you are saying, I come from Cinema, where a material can live on its own in the "Project Material Library" without being attached to a part (parent) and also can live in the larger library.

Maybe we call it a Material Component, which would be a group of nodes not necessarily comprising of an entire material, just a collection of nodes to perform a function.

Then the next part would be to create a LiveLink between materials in the project that are being used to the Material Component Library where any changes in the Material Component would flow to all Materials that called on the Component.

I'm liking this, but yeah its getting deep. Smarter people than me would probably have a better way of implementing it. This would be a huge plus for working in teams as well where there are core materials for products, but sometimes need to be tweaked.

Other render engines allow "Linked" materials where the material is always connected to the master library and if you make a change to the Master Material (maybe that's how we do it, a new material type or catagory) it flows to all the projects that reference it . Like xRefs but for materials. Then if you want to isolate it to the project and disconnect it from the Master Material you can do that. There is even already an "Isolate to Selection" choice in the contextual menus.

+1 again