Использовать встроенные HLSL структуры в Встроенном Render Pipeline
Используйте предустановленные HLSL вершинные входные структуры из UnityCG.cginc для упрощения декларирования вершинных шейдеров во Встроенном Render Pipeline.
Чтобы использовать предварительно созданную структуру, выполните следующие действия:
- Добавьте
#include "UnityCG.cginc"вверху вашегоHLSLPROGRAM. Это импортирует файлUnityCG.cginc, который содержит предварительно построенные структуры. - При объявлении функции вершинного шейдера используйте одну из предустановленных структур в качестве типа входного параметра. Например, чтобы использовать
appdata_base, используйтеv2f vert (appdata_base vertex_data).
Сборные конструкции в UnityCG.cginc являются:
appdata_base: указываетvertexдля позиции,normalиtexcoord.appdata_tan: указываетvertexдля позиции,tangent,normalиtexcoord.appdata_full: указываетvertexдля позиции,tangent,normal,color,texcoord,texcoord1,texcoord2иtexcoord3.appdata_img: Заявляетvertexдля позиции иtexcoord.
Пример
Следующий шейдер использует appdata_baseи раскрашивает сетку на основе её нормалей.
Shader "VertexInputSimple" {
SubShader {
Pass {
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
// Declare the structure for data passed from the vertex shader to the fragment shader.
struct v2f {
float4 position : SV_POSITION;
half4 color : COLOR;
};
// Use the built-in appdata_base structure for the vertex shader.
v2f vert (appdata_base v)
{
v2f output_data;
// Use the position from appdata_base.
output_data.position = UnityObjectToClipPos(v.vertex);
// Use the normal from appdata_base.
output_data.color.xyz = v.normal * 0.5 + 0.5;
output_data.color.w = 1.0;
return output_data;
}
half4 frag (v2f i) : SV_Target {
return i.color;
}
ENDHLSL
}
}
}