如何从Unity 3d shaderlab中的像素着色器返回纹理?

时间:2012-10-30 21:11:49

标签: c# unity3d shader pixel-shader

如何创建一个简单的像素颜色着色器,表示采用纹理,应用类似掩蔽的东西:

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

in并返回一个纹理,可以像mats[1].SetTexture("_MainTex", mats[0].GetTexture("_MainTex"));那样从c#代码传递给下一个着色器?

1 个答案:

答案 0 :(得分:4)

  

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

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

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

就像这样:

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

在这种情况下,sourceTexture将绑定到我的着色器的_MainTex。