Unity黑白材料如何更改颜色的单独颜色(黑白)

时间:2019-05-25 18:52:09

标签: unity3d material

因此,我制作了带有jpg的材料,因此整个内容都是黑白的。有没有办法将黑色部分更改为任何颜色,然后将白色部分更改为任何颜色?

那么黑白材料可以是红色和蓝色等任意两种颜色吗?

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用图像的红色/绿色/蓝色通道。然后创建一个着色器,使您可以为这些通道重新着色。您需要的精确着色器取决于您使用它的用途-但要点是,您只需要将每个通道乘以要为其着色的颜色即可。

这是一个使用此方法的简单的漫反射曲面着色器。您可以为UI等其他目的创建类似的着色器。

只需将此着色器放入您的项目中,将纹理修改为红色和绿色,然后将此着色器应用于用于渲染纹理的材质即可。然后,您可以修改材质上的属性,以修改两种颜色呈现为哪种颜色。

还有其他方法可以混合这两个通道-此着色器会进行相加混合,这可能并不是您想要的。

Shader "Custom/Recolourable" {
Properties {
    _MainTex ("Base (RGB)", 2D) = "white" {}
    _RedChannelColor ("Red Channel Color", Color) = (1,0,0,1)
    _GreenChannelColor ("Green Channel Color", Color) = (0,1,0,1)
}
SubShader {
    Tags { "RenderType"="Opaque" }
    LOD 150
    Cull Off

CGPROGRAM
#pragma surface surf Lambert noforwardadd

sampler2D _MainTex;
fixed4 _RedChannelColor;
fixed4 _GreenChannelColor;

struct Input {
    float2 uv_MainTex;
};

void surf (Input IN, inout SurfaceOutput o) {
    fixed4 c = tex2D(_MainTex, IN.uv_MainTex);
    o.Albedo = c.r * _RedChannelColor + c.g * _GreenChannelColor;
    o.Alpha = c.a;
}
ENDCG
}

Fallback "Mobile/VertexLit"
}