我有问题。我尝试搜索,但是找不到想要的东西。 我有质地。此纹理具有蓝色,绿色和黑色。它们是面具,实际上是面部纹理。我要替换它们,例如蓝色将统一替换为我的眼睛纹理,绿色将替换为面部纹理。如何编写此着色器?我搜索了,但只有我找到了变色着色器:(谢谢..
答案 0 :(得分:0)
我解释您问题的方式是,您需要一个着色器,其中一种纹理充当蒙版,在其他3种纹理之间混合。我假设这是为了进行角色自定义,将不同的面孔缝在一起。
在片段(或冲浪)功能中,采样3种纹理和蒙版:
fixed4 face = tex2D(_FaceTex, i.uv); // Green channel of the mask
fixed4 eyes = tex2D(_EyeTex, i.uv); // Blue channel of the mask
fixed4 mouth = tex2D(_MouthTex, i.uv); // No mask value (black)
fixed4 mask = tex2D(_MaskTex, i.uv);
然后,您需要使用遮罩将它们融合在一起。假设蒙版中代表黑色的是背景色,然后在其他纹理中进行插值。
fixed4 col = lerp(mouth, eyes, mask.b);
然后我们可以在结果颜色和我们的第三个值之间进行插值:
col = lerp(col, face, mask.g);
您可以使用红色通道再次重复此操作,以获得第四个纹理。当然,这假定您在遮罩中使用纯红色,绿色或蓝色。也可以使用一种更特定的颜色作为键,例如,您可以使用蒙版颜色和某些参考颜色之间的距离的绝对值:
fixed4 eyeMaskColor = (0.5, 0.5, 1, 1);
half t = 1 - saturate(abs(length(mask - eyeMaskColor)));
在这种情况下,t
是用于混合纹理的lerp因子。 saturate
函数将值限制在[0,1]的范围内。如果蒙版颜色与eyeMaskColor相同,则它们之间的矢量长度为0,并且该语句的值为1。