Создание поверхностного шейдера в встроенном Render Pipeline
Выполните следующие действия:
- Добавьте блок
CGPROGRAMк блокуSubShaderв коде шейдера, а не к блокуPass. Unity автоматически создает несколько проходов при компиляции шейдера поверхности. - Добавить директиву
#pragma surface [surfaceFunction] [lightModel].
Шейдеры поверхности несовместимы с HLSLPROGRAM блоков, но вы можете использовать HLSL внутри a CGPROGRAM блок. Для получения дополнительной информации см. Блоки кода шейдера в ShaderLab ссылка.
Пример
Shader "Example/Diffuse Simple" {
SubShader {
Tags { "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf Lambert
struct Input {
float4 color : COLOR;
};
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = 1;
}
ENDCG
}
Fallback "Diffuse"
}
Вот как это выглядит на модели с двумя огни настроить: