【问题标题】:How to return a texture from pixel shader in Unity 3d shaderlab?如何从 Unity 3d shaderlab 中的像素着色器返回纹理?
【发布时间】:2012-10-30 21:11:48
【问题描述】:

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

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"));? 之类的方式传递给下一个着色器?

【问题讨论】:

  • 您尝试过 Unity 帮助论坛吗?这是一个非常具体的问题。但是……你可能不想做一个着色器来只修改一个纹理。

标签: c# unity3d shader pixel-shader


【解决方案1】:

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

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

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

应该是这样的:

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

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

【讨论】:

猜你喜欢
  • 2016-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多