【发布时间】:2019-12-20 22:54:19
【问题描述】:
我的着色器做了一些数学运算来确定顶点 alpha,所以我有一个函数可以在数据传递到我的 surf 函数之前执行此操作。
#pragma surface surf Standard alpha
#pragma target 3.0
struct Input
{
float2 uv_MainTex;
float tranparency;
};
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.transparency = v.color.a;
}
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 时反映 someAlpha:
o.Alpha = c.a; //Can I do c.a * IN.transparency ?
目前,绝对没有任何事情发生。如何在 surf 中使用我想要的 alpha 值?
【问题讨论】: