Страница 1 из 1

Объединение двух текстур по маске (Решено)

СообщениеДобавлено: 31 янв 2013, 06:40
Solipsist
Может кто-нибудь видел подобный шейдер, или подскажет в какую сторону копать:
В качестве входных параметров: две текстуры, черно-белая (или альфа) маска, и переменная в диапазоне от 0 до 1. Необходимо реализовать следующий эффект: если значение какого-либо канала в маске в определенном пикселе меньше значения переменной, то берем пиксель из первой текстуры иначе из второй. Пиксели смешивать не нужно. То есть нужно, что-то среднее между Dissolve Shaders и этим шейдером:
http://unity3d.ru/distribution/viewtopic.php?f=35&t=2994

Re: Объединение двух текстур по маске

СообщениеДобавлено: 31 янв 2013, 14:58
waruiyume
Синтаксис:
Используется glsl
Shader "Custom/NewShader" {
        Properties {
                _MainTex ("Base (RGB A-mask)", 2D) = "white" {}
                _SecondTex ("Base (RGB)", 2D) = "white" {}
                _Threshold ("Threshold", Range(0,1))=0.5
        }
        SubShader
        {
                Tags { "RenderType"="Opaque" }
                LOD 200
               
                CGPROGRAM
                #pragma surface surf Lambert

                sampler2D _MainTex;
                sampler2D _SecondTex;
                fixed _Threshold;

                struct Input
                {
                        float2 uv_MainTex;
                };

                void surf (Input IN, inout SurfaceOutput o)
                {
                        fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
                        fixed4 c1 = tex2D (_SecondTex, IN.uv_MainTex);

                        if(c.a>_Threshold) c=c1;

                        o.Albedo = c.rgb;
                        o.Alpha = c.a;
                }
                ENDCG
        }
        FallBack "Diffuse"
}

 

Re: Объединение двух текстур по маске

СообщениеДобавлено: 31 янв 2013, 16:24
Solipsist
2 waruiyume
Большое спасибо, то что нужно!

Re: Объединение двух текстур по маске (Решено)

СообщениеДобавлено: 24 сен 2015, 10:11
egoded
спасибо за пример, а что означает?

Синтаксис:
Используется csharp
 Tags { "RenderType"="Opaque" }
                LOD 200



Можно ли что то дописать такое что бы этот шейдер работал быстрее?

Столкнулся с тем что больше 4-х текстур он не смешивает, можно ли снять это ограничение?

Re: Объединение двух текстур по маске (Решено)

СообщениеДобавлено: 24 сен 2015, 18:26
waruiyume
RenderType
http://docs.unity3d.com/Manual/SL-SubShaderTags.html
Про Lod можно, наверно, посмотреть в справке о настройках качества.

Re: Объединение двух текстур по маске (Решено)

СообщениеДобавлено: 25 сен 2015, 11:54
egoded
а можно ещё узнать,

Синтаксис:
Используется csharp
if(c.a>_Threshold) c=c1;

                        o.Albedo = c.rgb;


если я хочу изменять пикселы только с определёнными координатами, например 53*76, что нужно писать в условии?

Re: Объединение двух текстур по маске (Решено)

СообщениеДобавлено: 22 окт 2015, 14:36
egoded
ещё хотелось бы узнать как сделать полупрозрачный материал?

Смешивает две текстуры нормально, но альфу теряет на выходе. Для эксперимента я с1.a и с.a делал равными 0, но всё равно обьект рисуется.

Альфу он читает, это видно при обьеденении, но на выходе получается сплошная текстурка без дырок.