Gradient + Transparency

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

Gradient + Transparency

Сообщение Basyan 29 май 2016, 20:00

Доброго здравия. Ранее с этим не работал, поэтому обратился на форум. Для тех кто разбирается задача простая. Есть шейдер градиента, нужно добавить карту прозрачности на подобии стандартного "Unlit/Transparent". Буду благодарен за помощь.
Синтаксис:
Используется csharp
Shader "Unlit/LinearGradient"
{
        Properties {
        _TopColor ("Color1", Color) = (1,1,1,1)
        _BottomColor ("Color2", Color) = (1,1,1,1)
    }
        SubShader
        {
                Pass
                {
                        CGPROGRAM
                        #pragma vertex vert
                        #pragma fragment frag
                       
                        #include "UnityCG.cginc"

                        fixed4 _TopColor;
                        fixed4 _BottomColor;

                        struct v2f {
                                float4 position : SV_POSITION;
                                fixed4 color : COLOR;
                        };

                        v2f vert (appdata_full v)
                        {
                                v2f o;
                                o.position = mul (UNITY_MATRIX_MVP, v.vertex);
                                o.color = lerp(_TopColor,_BottomColor, v.texcoord.y );
                                return o;
                        }

                        fixed4 frag (v2f i) : SV_Target
                        {
                                float4 color = i.color;
                                color.a = 1;
                                return color;
                        }
                        ENDCG
                }
        }
}
 
Аватара пользователя
Basyan
UNIт
 
Сообщения: 57
Зарегистрирован: 03 авг 2015, 10:40

Re: Gradient + Transparency

Сообщение DbIMok 01 июн 2016, 01:39

не проверял
Синтаксис:
Используется glsl
Shader "Unlit/LinearGradient"
{
        Properties {
        _AlphaTex ("Alpha", 2D) = "white" {}
        _TopColor ("Top Color", Color) = (1,1,1,1)
        _BottomColor ("Bottom Color", Color) = (1,1,1,1)
    }
        SubShader
        {
                Pass
                {
                        CGPROGRAM
                        #pragma vertex vert
                        #pragma fragment frag
                       
                        #include "UnityCG.cginc"

                        sampler2D _AlphaTex;
                        fixed4 _TopColor;
                        fixed4 _BottomColor;

                        struct v2f {
                                float4 position : SV_POSITION;
                                fixed4 color : COLOR;
                                float2 texcoord : TEXCOORD0;
                        };

                        v2f vert (appdata_full v)
                        {
                                v2f o;
                                o.position = mul (UNITY_MATRIX_MVP, v.vertex);
                                o.color = lerp(_TopColor,_BottomColor, v.texcoord.y );
                                o.texcoord = v.texcoord;
                                return o;
                        }

                        fixed4 frag (v2f i) : SV_Target
                        {
                                fixed4 color = i.color;
                                color.a = tex2D(_AlphaTex, i.texcoord).a;
                                return color;
                        }
                        ENDCG
                }
        }
}
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Gradient + Transparency

Сообщение Basyan 01 июн 2016, 10:26

Спасибо за ответ, шейдер не сработал.

Вот рабочее решение
Синтаксис:
Используется glsl
Shader "Unlit/GradientAlpha" {
     Properties{
         _TopColor("Color1", Color) = (1,1,1,1)
         _BottomColor("Color2", Color) = (1,1,1,1)
         _MainTex ("Main Texture", 2D) = "white" {}
     }
         SubShader
     {
         Tags { "RenderType" = "Transparent" "Queue" = "Transparent" }
         Pass
         {
             ZWrite Off
             Blend SrcAlpha OneMinusSrcAlpha
 
             CGPROGRAM
             #pragma vertex vert
             #pragma fragment frag
 
             #include "UnityCG.cginc"
 
             sampler2D _MainTex;
             float4 _MainTex_ST;
 
             fixed4 _TopColor;
             fixed4 _BottomColor;
             half _Value;
 
             struct v2f {
                 float4 position : SV_POSITION;
                 fixed4 color : COLOR;
                 float2 uv : TEXCOORD0;
             };
 
             v2f vert (appdata_full v)
             {
                 v2f o;
                 o.position = mul (UNITY_MATRIX_MVP, v.vertex);
                 o.uv = TRANSFORM_TEX (v.texcoord, _MainTex);
                 o.color = lerp (_BottomColor,_TopColor, v.texcoord.y);
                 return o;
             }
 
             fixed4 frag(v2f i) : SV_Target
             {
                 float4 color;
                 color.rgb = i.color.rgb;
                 color.a = tex2D (_MainTex, i.uv).a * i.color.a;
                 return color;
             }
             ENDCG
         }
     }
 }
Аватара пользователя
Basyan
UNIт
 
Сообщения: 57
Зарегистрирован: 03 авг 2015, 10:40

Re: Gradient + Transparency

Сообщение i_am_kisly 01 июн 2016, 16:28

Еще нужно?
Текущие проекты: [Lineage2 unity5][_blog non6.blogspot.ru ]
i_am_kisly
Старожил
 
Сообщения: 742
Зарегистрирован: 10 фев 2015, 17:26
  • Сайт

Re: Gradient + Transparency

Сообщение Basyan 04 июн 2016, 14:15

i_am_kisly писал(а):Еще нужно?

Буду признателен за ваш вариант шейдера. Тот что я выложил выше некорректно работает на мобильных устройствах.
Аватара пользователя
Basyan
UNIт
 
Сообщения: 57
Зарегистрирован: 03 авг 2015, 10:40

Re: Gradient + Transparency

Сообщение i_am_kisly 04 июн 2016, 23:29

шейдер должен делать прозрачность по градиенту или как ? мб картинку нарисуете
Текущие проекты: [Lineage2 unity5][_blog non6.blogspot.ru ]
i_am_kisly
Старожил
 
Сообщения: 742
Зарегистрирован: 10 фев 2015, 17:26
  • Сайт

Re: Gradient + Transparency

Сообщение Basyan 05 июн 2016, 06:09

Изображение
Аватара пользователя
Basyan
UNIт
 
Сообщения: 57
Зарегистрирован: 03 авг 2015, 10:40

Re: Gradient + Transparency

Сообщение i_am_kisly 05 июн 2016, 13:13

окей. взял в работу
Текущие проекты: [Lineage2 unity5][_blog non6.blogspot.ru ]
i_am_kisly
Старожил
 
Сообщения: 742
Зарегистрирован: 10 фев 2015, 17:26
  • Сайт

Re: Gradient + Transparency

Сообщение i_am_kisly 05 июн 2016, 14:04

Сделал в двух вариантах на скорую руку.
https://dropmefiles.com/M1PWw

Изображение
Текущие проекты: [Lineage2 unity5][_blog non6.blogspot.ru ]
i_am_kisly
Старожил
 
Сообщения: 742
Зарегистрирован: 10 фев 2015, 17:26
  • Сайт

Re: Gradient + Transparency

Сообщение i_am_kisly 05 июн 2016, 20:07

ну че там ? помогло, нет ?
Текущие проекты: [Lineage2 unity5][_blog non6.blogspot.ru ]
i_am_kisly
Старожил
 
Сообщения: 742
Зарегистрирован: 10 фев 2015, 17:26
  • Сайт

Re: Gradient + Transparency

Сообщение Basyan 07 июн 2016, 08:40

i_am_kisly Огромное спасибо! Всё работает. Не знал о таком методе создания шейдеров, очень удобно.
Аватара пользователя
Basyan
UNIт
 
Сообщения: 57
Зарегистрирован: 03 авг 2015, 10:40

Re: Gradient + Transparency

Сообщение i_am_kisly 07 июн 2016, 09:40

Это для ленивых :) конечный результат надо еще переписывать потому как не оптимально делает.
Текущие проекты: [Lineage2 unity5][_blog non6.blogspot.ru ]
i_am_kisly
Старожил
 
Сообщения: 742
Зарегистрирован: 10 фев 2015, 17:26
  • Сайт

Re: Gradient + Transparency

Сообщение kripto289 09 июн 2016, 18:56

i_am_kisly писал(а):Это для ленивых :) конечный результат надо еще переписывать потому как не оптимально делает.

Я бы глянул код итоговый код. Мне кажется вряд ли можно упороть код в котором кроме пары lerp ничё нет.
Аватара пользователя
kripto289
UNIверсал
 
Сообщения: 476
Зарегистрирован: 30 сен 2013, 03:30
Откуда: Екатеринбург
  • Сайт

Re: Gradient + Transparency

Сообщение waruiyume 09 июн 2016, 19:09

Нодовые редакторы, по крайней мере раньше, умели генерить только сурфейс шейдеры, которые, в данном случае, и не нужны, хотя хз, что после компиляции от него останется, и генерируют абсолютно нечитаемые текстовые конструкции, в духе: "node107 = lerp(max(pow(node453, node175), saturate(node256-node108 * node1024)), node303+node205)", а насчёт производительности, вроде, никто не жалуется. Или действительно бывает медленней, чем написанное руками?
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону


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

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

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