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

C# 如何在Unity 3d shaderlab中从像素着色器返回纹理?,c#,unity3d,shader,pixel-shader,C#,Unity3d,Shader,Pixel Shader,如何创建一个简单的像素颜色着色器,例如采用纹理,applyes,例如遮罩: half4 color = tex2D(_Texture0, i.uv.xy); if(distance(color, mask) > _CutOff) { return color; } else { return static_color; } 并返回一个纹理,该纹理可以通过类似于mats[1]的方式从c#代码传递到下一个着色器。SetTexture(“_MainTex”,mats[0]。GetTex

如何创建一个简单的像素颜色着色器,例如采用纹理,applyes,例如遮罩:

half4 color = tex2D(_Texture0, i.uv.xy);
if(distance(color, mask) > _CutOff)
{
    return color;
}
else
{
return static_color;
}
并返回一个纹理,该纹理可以通过类似于
mats[1]的方式从c#代码传递到下一个着色器。SetTexture(“_MainTex”,mats[0]。GetTexture(“_MainTex”)

但是。。。您可能不希望使用着色器仅修改纹理

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

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

是这样的:

var mat = new Material(Shader.Find("My Shader"));
var output = new RenderTexture(...);
Graphics.Blit(sourceTexture, output, mat);
在这种情况下,sourceTexture将绑定到My Shader的_MainTex

但是。。。您可能不希望使用着色器仅修改纹理

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

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

是这样的:

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

在这种情况下,sourceTexture将绑定到_maintexofMy Shader

您是否尝试过Unity帮助论坛?这是一个非常具体的问题。但是您可能不希望使用着色器仅修改纹理。您是否尝试过Unity帮助论坛?这是一个非常具体的问题。但是您可能不希望使用着色器仅修改纹理。如何从渲染器中获取像素数据?您可以使用。您可能很容易回答此问题,@Valentismonov欢呼您如何从渲染器中获取像素数据?您可以使用。您可能很容易回答此问题,@Valentismonov干杯