Integrating height information into Principled BSDF for easy layer mixing?

Recently I’ve started learning Substace Designer and Painter.

One really useful thing in Substance Painter is that each layer (being a material) has height information assigned. It can be a uniform value between -1 and +1, by default it’s set to 0.

Imagine a simple use case - you’re making a material consisting of two layers. It could be rough metal with green slim on top of it:


This looks flat. If I want to have height transition between the two layers, I have to manually affect Normals of both Principled BSDF nodes, or explicitly affect the Material Displacement:


We can add Normal detail to the individual layers:


One problem is - I see no way of stacking Displacement node, other than creating a final grayscale displacement map and feeding it into the Displacement node.

Though - if we could have the height information carried with the Principled shader, and mixed properly using the Mix Node - that could simplify the process, which can make the node trees quite messy if the material involves more than three layers.

Here’s my test project:
Principled Height Demo 01.blend (163.6 KB)

Height ain’t nothing but a number. You can add them, mix them (lerp them), multiply them, anything you want. Anything you’re sending to a principled BSDF, you can easily send to a math node as well.

Yes, but the Displacement node has some useful mapping tools -choosing the reference level, and the depth of the displacement.

It’d be nice to be able to daisy-chain them together.

All those tools can be done with math too. It’s just an offset (minus midlevel) multiplication (times scale), used to scale the normal (lol normal) to create a vector for displacement.

But if you want, you should be able to chain them. Use multiple bump nodes and use a vector add node (or mix RGB if you’d rather mix them). 2.80+ displacement just expects a vector for the displacement output. Untested, just my understanding of it.