我的着色器会做一些数学运算来确定顶点alpha,所以我有一个函数可以在数据传递到我的surf函数中之前进行此操作。
void foo(inout appdata_full v, out Input o) {
UNITY_INITIALIZE_OUTPUT(Input, o);
float someAlpha;
[...some maths to create someAlpha value...]
v.color.a = someAlpha;
}
half _Glossiness;
half _Metallic;
fixed4 _Color;
UNITY_INSTANCING_BUFFER_START(Props)
UNITY_INSTANCING_BUFFER_END(Props)
void surf (Input IN, inout SurfaceOutputStandard o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
o.Alpha = c.a;
}
然后,当我使用Input IN时,我希望在设置Alpha时反映出某些Alpha:
o.Alpha = c.a;
目前,绝对没有任何反应。如何在冲浪中使用我想要的alpha值?
是。您需要向COLOR
对象添加Input
语义:
struct Input {
float4 uv_MainTex;
float4 vertColor : COLOR;
};
然后在foo
中分配给它(尽管如果有#pragma surface surf
,则可能没有必要:]
void foo(inout appdata_full v, out Input o) {
UNITY_INITIALIZE_OUTPUT(Input, o);
float someAlpha;
[...some maths to create someAlpha value...]
v.color.a = someAlpha;
o.vertColor = v.color;
}
然后在surf
中使用它:
void surf (Input IN, inout SurfaceOutputStandard o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
fixed4 vertexColor = IN.vertColor;
o.Albedo = c.rgb;
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
o.Alpha = vertexColor.a * c.a; // you may or may not want to combine alpha like this
}