myWallJSON
myWallJSON

Reputation: 9522

How to return a texture from pixel shader in Unity 3d shaderlab?

How to create a simple pixel color shader that say takes a texture, applyes something like masking:

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

in and returns a texture that can be passed to next shader from c# code in a way like mats[1].SetTexture("_MainTex", mats[0].GetTexture("_MainTex"));?

Upvotes: 2

Views: 5603

Answers (1)

Valentin Simonov
Valentin Simonov

Reputation: 1768

But... you might not want to do a shader to only modify a texture.

Why not? It is a common practice.

Check out Graphics.Blit. It basically draws a quad with material (including a shader) applied. So you could use your shader to modify a texture. But the texture has to be RenderTexture.

It would be like this:

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

sourceTexture in this case will be bound to _MainTex of My Shader.

Upvotes: 4

Related Questions