Yes, I (originally) assumed that’s exactly what Mix Shader node does.
Ah, yes. I did not take this into consideration. In that case, I agree that there should be a separate type of a Mix node which just combines individual channels of the BSDF structure.
Yes. I’d expect that once we have BSDF Attribute Get and BSDF Attribute Set, you can for example create “Multiply Color Mix” nodegroup, which takes in a BSDF input and a Color (RGB) input, then uses BSDF Attribute Get node to retrieve Color attribute, which then gets plugged into RGB Mix node as a Input A, the Color node group input gets plugged as Input B, and result of this RGB Mix node set to multiply gets plugged into BSDF Attribute Set node to set the result as new Color channel.
A more practical example of this would be a “Wet puddles” nodegroup. When you want to take your existing shader, regardless of how many mixed BSDFs it has down the node tree, and make it appear wet, you need to do multiple things:
- Decrease the diffuse albedo on the wet areas
- Remove or reduce the normal map detail on the wet areas
- Replace or decrease roughness on the wet areas
- Do not affect any other channels
Right now, this is not possible to do in Blender conveniently.
Same answer as to the point above. I was just trying to make a point that these specialized Mixes should be just node groups users can make instead of some hardcoded arbitrary blending modes. Having Combine BSDF, Separate BSDF, BSDF Attribute Set and BSDF Attribute Get nodes is a good fundamental set for almost unlimited PBR texturing possibilities, in combination with what Blender already offers.
I’d expect the Alpha/Opacity to be evaluated at the very end, at the Material Output, and everything leading up to it would just be combining the grayscale values from the various opacity slots, such as Alpha slot of the Principled BSDF or Color value of the Transparent BSDF.
But I do agree I did not consider that right now, Cycles is actually mixing the evaluated materials, instead of mixing just the individual material inputs, and then evaluating that as a single material, as I’d expect in an average game engine. And I do understand that supporting both ways of evaluating the materials is important, but also challenging. But ultimately, I believe it’s just challenging, not impossible to solve.