我正在尝试制作一个着色器,首先我将所有内容都设置为灰度,然后我想根据最小/最大RGB范围提取颜色。我觉得我的if
陈述不正确。我试图获得罪恶之城效果,但我所拥有的并不是......
CGPROGRAM
#pragma vertex vert_img
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc"
uniform sampler2D _MainTex;
uniform float4 _ColorMin;
uniform float4 _ColorMax;
uniform sampler2D _RampTex;
fixed4 frag (v2f_img i) : COLOR {
fixed4 original = tex2D(_MainTex, i.uv);
fixed grayscale = Luminance(original.rgb);
half2 remap = half2(grayscale, 0.5);
fixed4 output = tex2D(_RampTex, remap);
half avg = (original.r + original.g + original.b) / 3;
half4 nC = half4(avg, avg, avg, original.a);
if(original.r >= _ColorMin.r && original.r <= _ColorMax.r){
nC.r = original.r;
}
if(original.g >= _ColorMin.g && original.g <= _ColorMax.g){
nC.g = original.g;
}
if(original.b >= _ColorMin.b && original.b <= _ColorMax.b){
nC.b = original.b;
}
output = fixed4(nC.r, nC.g, nC.b, original.a);
return output;
}
ENDCG
以下是我说的时候我得到的结果
0 - 1红色
0 - 0绿色
0 - 0蓝色
以下是原文:
答案 0 :(得分:0)
这应该有效:
fixed4 original = tex2D(_MainTex, i.uv);
half avg = (original.r + original.g + original.b) / 3;
half4 gray = half4(avg, avg, avg, original.a);
half4 nC = gray;
if (original.r >= _ColorMin.r && original.r <= _ColorMax.r)
{
if (original.g >= _ColorMin.g && original.g <= _ColorMax.g)
{
if (original.b >= _ColorMin.b && original.b <= _ColorMax.b)
{
nC = original;
}
}
}
else
{
nC = gray;
}
output = fixed4(nC.r, nC.g, nC.b, original.a);
return output;
这将为您提供不符合条件的突然轮廓。为了解决这个问题,你可以在else
区块中混合颜色。