Landscape blend by normal?

Hello! I have some materials that dynamically blend together for some assets, I.E this mossy rock always have moss growing on normals facing up at a minimum angle.


20200129-16_24_57Moss_Mat.jpg

Essentially I just use a world aligned blend, and use the alpha output to lerp between 2 base colors. Simple.

I wish to recreate this effect for my master landscape material as well, in order to break up the blending between different surfaces instead of it just fading in linearily.
But I cannot quite get it to play along.

I mostly manage everything through material attributes in my master material, so I have used one of the “with normal” outputs, but it still seems to interpolate evenly instead of normal based.
I’ve tried to get the base color from the attributes, interpolate it using the direct alpha input instead, and then set the base color material attribute. But I keep getting these errors:


[SM5] Function WorldAlignedBlend: (Node PixelNormalWS) Invalid node PixelNormalWS used for Normal input.
[SM5] Function WorldAlignedBlend: (Node PixelNormalWS) Invalid node used in vertex/hull/domain shader input!

Despite only handling the base colors and then setting them. I don’t see why it would work for my rocks, but not my landscape.

Here’s an example of the sort of look I want to go for:

It looks like there tons of small ledges and details, but it’s actually just slope that automatically blends in the grass.

Any suggestions?

Edit: I got something going by implementing the normal map of the rock as the explicit normal, but it makes the dirt/grass blend in everywhere based on the normal map and not just in the transitional areas. I’m not sure of how to get the best of both worlds.