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

Шейдеры и все-все-все.

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

Сообщение Solipsist 31 янв 2013, 06:40

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

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

Сообщение waruiyume 31 янв 2013, 14:58

Синтаксис:
Используется 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"
}

 
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

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

Сообщение Solipsist 31 янв 2013, 16:24

2 waruiyume
Большое спасибо, то что нужно!
Solipsist
UNец
 
Сообщения: 35
Зарегистрирован: 18 окт 2010, 07:19
Откуда: Иркутск
  • Сайт

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

Сообщение egoded 24 сен 2015, 10:11

спасибо за пример, а что означает?

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



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

Столкнулся с тем что больше 4-х текстур он не смешивает, можно ли снять это ограничение?
egoded
UNITрон
 
Сообщения: 313
Зарегистрирован: 14 июл 2012, 08:47

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

Сообщение waruiyume 24 сен 2015, 18:26

RenderType
http://docs.unity3d.com/Manual/SL-SubShaderTags.html
Про Lod можно, наверно, посмотреть в справке о настройках качества.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

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

Сообщение egoded 25 сен 2015, 11:54

а можно ещё узнать,

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

                        o.Albedo = c.rgb;


если я хочу изменять пикселы только с определёнными координатами, например 53*76, что нужно писать в условии?
egoded
UNITрон
 
Сообщения: 313
Зарегистрирован: 14 июл 2012, 08:47

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

Сообщение egoded 22 окт 2015, 14:36

ещё хотелось бы узнать как сделать полупрозрачный материал?

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

Альфу он читает, это видно при обьеденении, но на выходе получается сплошная текстурка без дырок.
egoded
UNITрон
 
Сообщения: 313
Зарегистрирован: 14 июл 2012, 08:47


Вернуться в Shader Lab

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2