2

如何创建一个简单的像素颜色着色器,说它需要一个纹理,应用类似遮罩的东西:

half4 color = tex2D(_Texture0, i.uv.xy);
if(distance(color, mask) > _CutOff)
{
    return color;
}
else
{
return static_color;
}

in 并返回一个纹理,该纹理可以从 c# 代码以类似的方式传递给下一个着色器mats[1].SetTexture("_MainTex", mats[0].GetTexture("_MainTex"));

4

1 回答 1

4

但是......你可能不想做一个着色器来只修改一个纹理。

为什么不?这是一种常见的做法。

查看Graphics.Blit。它基本上绘制了一个应用了材质(包括着色器)的四边形。所以你可以使用你的着色器来修改纹理。但是纹理必须是 RenderTexture。

它会是这样的:

var mat = new Material(Shader.Find("My Shader"));
var output = new RenderTexture(...);
Graphics.Blit(sourceTexture, output, mat);

在这种情况下,sourceTexture 将绑定到My Shader的 _MainTex 。

于 2012-11-01T13:21:12.083 回答