【问题标题】:Unity Shader RGBA Color maskUnity Shader RGBA 颜色遮罩
【发布时间】:2015-01-22 23:23:08
【问题描述】:

我正在开发 Unity 着色器,我想在其中根据蒙版图像更改颜色。在此蒙版图像中,RGB 通道代表可以在着色器中选择的颜色。着色器背后的想法是,无需手动更改纹理即可轻松更改对象的外观。

Shader "Custom/MultiColor" {
    Properties {
        _MainTex ("Base (RGB)", 2D) = "white" {}
        _MaskTex ("Mask area (RGB)", 2D) = "black" {}
        _ColorR ("Red Color", Color) = (1,1,1,1)
        _ColorG ("Green Color", Color) = (1,1,1,1)
        _ColorB ("Blue Color", Color) = (1,1,1,1)
    }
    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        #pragma surface surf Lambert

        sampler2D _MainTex;
        sampler2D _MaskTex;
        half4 _ColorR;
        half4 _ColorG;
        half4 _ColorB;
        half4 _MaskMult;

        struct Input {
            float2 uv_MainTex;
        };

        void surf (Input IN, inout SurfaceOutput o) {
            half4 main = tex2D (_MainTex, IN.uv_MainTex);
            half4 mask = tex2D (_MaskTex, IN.uv_MainTex);

            half3 cr = main.rgb * _ColorR;
            half3 cg = main.rgb * _ColorG;
            half3 cb = main.rgb * _ColorB;

            half r = mask.r;
            half g = mask.g;
            half b = mask.b;

            half minv = min(r + g + b, 1);

            half3 cf = lerp(lerp(cr, cg, g*(r+g)), cb, b*(r+g+b));
            half3 c = lerp(main.rgb, cf, minv);

            o.Albedo = c.rgb;
            o.Alpha = main.a;
        }
        ENDCG
    } 
    FallBack "Diffuse"
}

着色器的问题是基于绿色和蓝色通道的蒙版颜色之间的混合。在假定来自红色区域的颜色中定义的颜色之间是可见的。下面的样本是可见的。

红色由红色蒙版创建,绿色由绿色蒙版创建,沙漠黄色由蓝色区域创建。我不知道为什么会发生这种情况或如何解决这个问题。

【问题讨论】:

    标签: colors unity3d shader cg


    【解决方案1】:

    最佳猜测:抗锯齿图像压缩。锯齿(在您使用的画笔上)将导致颜色通道重叠,导致它们混合。压缩通常通过根据每个像素周围的颜色平均每个像素的颜色信息来工作(jpeg 在这方面尤其臭名昭著)。

    在 Photoshop(或您正在使用的任何图像套件)中使用基于直像素的画笔(无锯齿,无圆边)和/或尝试通过着色器更改颜色并查看它们如何混合 - 两者都应该让您更好地了解幕后发生的事情。这与无损/未压缩的图像类型(例如 .tga)相结合应该会有所帮助,尽管它们可能会使用更多内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-19
      • 2023-03-18
      • 2017-07-05
      • 2011-05-25
      • 2020-04-27
      • 2016-12-27
      • 2018-01-06
      • 1970-01-01
      相关资源
      最近更新 更多