包含此页的版本:
不含此页的版本:
使用顶点修饰符函数,还可以计算顶点中的自定义数据着色器在 GPU 上运行的程序。更多信息
请参阅术语表,然后将传递给表面着色器:为内置渲染管线编写着色器的简化方法。更多信息
请参阅术语表函数。相同的编译指令vertex:functionName,但该函数应采用两个参数:inout appdata_full和out Input.可以填充任何不是内置值的 Input 成员。
注意:以这种方式使用的自定义输入成员的名称不得以“uv”开头,否则它们将无法正常工作。
下面的示例定义了自定义float3 customColormember,在顶点函数中计算:
Shader "Example/Custom Vertex Data" {
Properties {
_MainTex ("Texture", 2D) = "white" {}
}
SubShader {
Tags { "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf Lambert vertex:vert
struct Input {
float2 uv_MainTex;
float3 customColor;
};
void vert (inout appdata_full v, out Input o) {
UNITY_INITIALIZE_OUTPUT(Input,o);
o.customColor = abs(v.normal);
}
sampler2D _MainTex;
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
o.Albedo *= IN.customColor;
}
ENDCG
}
Fallback "Diffuse"
}
在此示例中customColor设置为法线的绝对值:
更实际的用途可能是计算内置输入变量未提供的任何每个顶点数据;或优化着色器计算。例如,可以在游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
请参阅术语表的顶点,而不是在表面着色器每像素中执行此作。