В первую очередь открываете мануал и читаете:
https://docs.unity3d.com/Manual/SL-SurfaceShaders.html
https://docs.unity3d.com/Manual/SL-SurfaceShaderEx...
После прочтения оказывается, что "My Shader3" это диффузный шейдер с картой нормалей, "My Shader2" это PBR шейдер с вынесенными параметрами металличности и гладкости, а "My Shader" это диффузный шейдер, который текстурирует только поверхности, у которых нормали смотрят вверх.
Теперь, если мы хотим эти шейдеры объединить, то получается, что нужно сделать PBR шейдер, добавить в него карту нормалей и ползунки гладкости и металличности, а потом вставить условие проверки нормалей.
void surf (Input IN, inout SurfaceOutput o)
{
o.Albedo = _Color;
// Металличность и гладкость указываем либо здесь, либо внутри условия
if(abs(IN.worldNormal.z)>0.5)
{
o.Albedo *= tex2D (_MainTex, IN.uv_MainTex).rgb;
// Применяем диффузную текстуру, карту нормалей и тому подобное
...
}
}
Дополнительно ещё можно скачать архив со встроенными шейдерами с
сайта юнити и посмотреть как они работают.