cg transparent detail

Для экспериментальных разработок и тем "я нашел чужой исходник, почему он не работает?"

cg transparent detail

Сообщение kitakun 28 июн 2013, 10:15

Всем привет, пытался сделать шейдер с двумя слоями, альфа каналом и еще одним дополнительным слоем отсечения альфы. Вроде даже получилось, но второй слой всегда черного цвета, не могли бы вы подсказать где я ошибся?
Изображение
Синтаксис:
Используется glsl
Shader "Custom/wo" {
Properties {
                _Color ("Main Color", Color) = (1,1,1,1)
                _FirstLayer ("First Layer (RGBA)" , 2D) = "black" {}
                _SeccondLayer("Seccond Layer (RGBA)", 2D) = "black" {}
                _MainAlpha("MainAlpha (A)", 2D) = "white" {}
        }
        SubShader {
                Tags { "Queue"="Transparent"  "RenderType"="Transparent"}
                LOD 200
                Lighting Off
                SeparateSpecular Off

                CGPROGRAM
                #pragma surface surf Lambert alpha
                fixed4 _Color;
                sampler2D _FirstLayer;
                sampler2D _SeccondLayer;
                sampler2D _MainAlpha;

                struct Input
                {
                        float2 uv_FirstLayer;
                        float2 uv_SeccondLayer;
                        float2 uv_MainAlpha;
                };

                void surf (Input IN, inout SurfaceOutput o) {
                        fixed4 firstlayer  = tex2D (_FirstLayer , IN.uv_FirstLayer );
                        fixed4 seccondlayer  = tex2D (_SeccondLayer , IN.uv_SeccondLayer );
                        firstlayer *= _Color;
                        seccondlayer *= _Color;



                        o.Albedo = (firstlayer.rgb * firstlayer.a - (seccondlayer.rgb * seccondlayer.a ) ) * _Color;
                        o.Alpha  = firstlayer.a+ seccondlayer.a - tex2D(_MainAlpha, IN.uv_MainAlpha).a * 2f;
                }
                ENDCG
        }
        FallBack "Transparent/VertexLit"
}

 
kitakun
UNIт
 
Сообщения: 64
Зарегистрирован: 25 июл 2011, 22:11
Откуда: Новосибирск

Re: cg transparent detail

Сообщение waruiyume 28 июн 2013, 10:38

Синтаксис:
Используется glsl

Shader "Custom/wo" {
Properties {
                _Color ("Main Color", Color) = (1,1,1,1)
                _FirstLayer ("First Layer (RGBA)" , 2D) = "black" {}
                _SeccondLayer("Seccond Layer (RGBA)", 2D) = "black" {}
                _MainAlpha("MainAlpha (A)", 2D) = "white" {}
        }
        SubShader {
                Tags { "Queue"="Transparent"  "RenderType"="Transparent"}
                LOD 200
                Lighting Off
                SeparateSpecular Off

                CGPROGRAM
                #pragma surface surf Lambert alpha
                fixed4 _Color;
                sampler2D _FirstLayer;
                sampler2D _SeccondLayer;
                sampler2D _MainAlpha;

                struct Input
                {
                        float2 uv_FirstLayer;
                        float2 uv_SeccondLayer;
                        float2 uv_MainAlpha;
                };

                void surf (Input IN, inout SurfaceOutput o) {
                        fixed4 firstlayer  = tex2D (_FirstLayer , IN.uv_FirstLayer );
                        fixed4 seccondlayer  = tex2D (_SeccondLayer , IN.uv_SeccondLayer );
                        //firstlayer *= _Color;
                        //seccondlayer *= _Color;

                        //o.Albedo = (firstlayer.rgb * firstlayer.a - (seccondlayer.rgb * seccondlayer.a ) ) * _Color;
                        //o.Alpha  = firstlayer.a+ seccondlayer.a - tex2D(_MainAlpha, IN.uv_MainAlpha).a * 2f;
                                                o.Albedo = lerp(firstlayer, seccondlayer, seccondlayer.a) * _Color;
                                                o.Alpha = max(firstlayer.a, seccondlayer.a) * tex2D(_MainAlpha, IN.uv_MainAlpha).a;
                }
                ENDCG
        }
        FallBack "Transparent/VertexLit"
}

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

Re: cg transparent detail

Сообщение kitakun 28 июн 2013, 13:06

Спасибо! Вернул строчку
Синтаксис:
Используется glsl
o.Alpha  = firstlayer.a+ seccondlayer.a - tex2D(_MainAlpha, IN.uv_MainAlpha).a * 2f;

и получил то, что и хотел.
kitakun
UNIт
 
Сообщения: 64
Зарегистрирован: 25 июл 2011, 22:11
Откуда: Новосибирск


Вернуться в Шейдерная кузня

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

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