Как вернуть текстуру из пиксельного шейдера в шейдерной лаборатории Unity 3d?

Как создать простой пиксельный цветной шейдер, который берет текстуру и применяет что-то вроде маскирования:

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"));?


person myWallJSON    schedule 30.10.2012    source источник
comment
Вы пробовали справочный форум Unity? Это у вас вполне конкретный вопрос. Но... вы можете не захотеть использовать шейдер только для изменения текстуры.   -  person LightStriker    schedule 31.10.2012


Ответы (1)


Но... вы можете не захотеть использовать шейдер только для изменения текстуры.

Почему нет? Это обычная практика.

Проверьте Graphics.Blit. Он в основном рисует четырехугольник с примененным материалом (включая шейдер). Таким образом, вы можете использовать свой шейдер для изменения текстуры. Но текстура должна быть RenderTexture.

Это было бы так:

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

sourceTexture в этом случае будет привязан к _MainTex My Shader.

person Valentin Simonov    schedule 01.11.2012
comment
Как получить пиксельные данные из RenderTexture? - person JagWire; 22.05.2015
comment
Вы делаете это с помощью docs.unity3d.ru/ScriptReference/Texture2D.ReadPixels.html. - person Valentin Simonov; 23.05.2015
comment
вы вполне можете легко ответить на этот вопрос, @ValentinSimonov приветствует stackoverflow.com/questions/34952184/ - person Fattie; 22.01.2016