Пример Shader поверхности модификатора вершин во встроенном Render Pipeline
Можно использовать функцию "вершинного модификатора", которая будет модифицировать входящие вершинные данные в вершинном шейдере. Это может быть использовано для таких вещей, как процедурная анимация и экструзия вдоль нормалей. Для этого используется директива компиляции Surface Shader vertex:functionName, с функцией, которая принимает параметр inout appdata_full.
Вот Shader, который перемещает вершины вдоль их нормалей на сумму, указанную в материале:
Shader "Example/Normal Extrusion" {
Properties {
_MainTex ("Texture", 2D) = "white" {}
_Amount ("Extrusion Amount", Range(-1,1)) = 0.5
}
SubShader {
Tags { "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf Lambert vertex:vert
struct Input {
float2 uv_MainTex;
};
float _Amount;
void vert (inout appdata_full v) {
v.vertex.xyz += v.normal * _Amount;
}
sampler2D _MainTex;
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
}
ENDCG
}
Fallback "Diffuse"
}