So…
A function is a function. The name of the output or input have 0 importance if not for visual/logical purpose.
Your whole quip on renaming those therefore makes little sense.
You can have multiple instances of the same function in a material. They all interact however you choose based on where they are connected.
Moving on.
The more layers to a material the worse the performance for the finished product.
It is highly preferred to break materials up into several biomes and use the built in world composition system to apply different materials to different mapsin order to get the overall look.
limiting the number of layers per component to 3 is also helpful (even if it doesn’t necessarily look good).
I would suggest refactoring everything you have (starting from scratch i suppose).
start with a base function that can render Any layer.
Feed Texture Objects into the function, and output a material parameters.
convert the texture objects to parameters, and you can change them in a material instance on the fly.
I would suggest feeding some override parameters into the function, like a color for instance, and setting it up so that if that value is not 0,0,0,0 you actually output the multiplied version of the layer (you may want to denature, then multiply. Mostly depends on what you are looking to do.)
Any parameter within the function will be avaliable to All materials and to any generated material instance.
The next thing you’ll want to feed the function is your UV coordinates.
You will feed the texture to a texture parameter, so you need UVs for it.
In the main material you’ll want to use landscape layer chords node (usually set to 7).
You may also wish to set a different Scale offset to allow for the on the fly change of a specific layer. Feed a scalar for it (default of 1) into the function, and multiply the layer chords by it. 1x1 being 1 it won’t change unless you set it.
With all that, you should have the general basis for your layers.
Next would be the preferred way to blend.
the landscape layer blend supports a few. The default and expensive one is the height blend. It takes in a heightmap and computed the blending based on it.
For each layer (except the first one which you almost always want to force as alpha blend) you will feed the heightmap texture into the height pins.
Or, you can just create layer samples, and manually construct the blending by blendmaterialatteibutes node using the layer as the alpha pin.
this is more performance friendly, but you end up having to do some base math with the layers at time to subtract one from another. It also requires that you blend the same layer onto itself initially for proper rendering.
this should get you a good basis of a material that you can manipulate via instances.
normally I create 2 or 3 instances and different biomes this way…
Things i didn’t cover that you should know/apply is the macrotexturing, needed to avoid tiling. And the distance blending. Both these things can be applied within the layer function.
Also possibly tessellation. Even if i usually disable it, you can set a distance tessellation within the function as well. And a multiplier to scale the G on the final output of world displacement is also helpful…