маска без alpha

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

маска без alpha

Сообщение denri11 18 окт 2012, 21:58

Доброго времени суток. Подскажите нужный шейдер, который бы использовал текстуру в качестве маски. Например, где у маски цвет черный - там ничего не отображается, мы видим объекты за этой текстурой. Причем самое главное, чтобы не юзались alpha blend и alpha test. Т.е. черные пиксели как бы не учавствют в получении результатирующей картинки.
denri11
UNец
 
Сообщения: 32
Зарегистрирован: 31 июл 2012, 20:40

Re: маска без alpha

Сообщение waruiyume 18 окт 2012, 22:33

Синтаксис:
Используется glsl
Shader "Custom/DiscardTest" {
        Properties {
                _MainTex ("Base (RGB)", 2D) = "white" {}
                _DiscardPoint("_DiscardPoint" ,Range(0,1)) = 0.5
        }
        SubShader {
                Tags { "RenderType"="Opaque" }
                LOD 200
               
                CGPROGRAM
                #pragma surface surf Lambert

                sampler2D _MainTex;
                fixed _DiscardPoint;

                struct Input {
                        float2 uv_MainTex;
                };

                void surf (Input IN, inout SurfaceOutput o) {
                        half4 c = tex2D (_MainTex, IN.uv_MainTex);
                        clip(max(max(c.r,c.g),c.b)-_DiscardPoint);//я ненастоящий сварщик и наверно можно проще
                        o.Albedo = c.rgb;
                        o.Alpha = c.a;
                }
                ENDCG
        }
        FallBack "Diffuse"
}

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

Re: маска без alpha

Сообщение denri11 18 окт 2012, 22:56

спасибо. то что нужно. буду тестить на производительность. А что нужно добавить, для того чтобы текстура не взаимодействовала с освещением, как в Unlit/Transparent, отображалась как нарисована?
denri11
UNец
 
Сообщения: 32
Зарегистрирован: 31 июл 2012, 20:40

Re: маска без alpha

Сообщение Worker 19 окт 2012, 11:16

Попробуй так:

Синтаксис:
Используется glsl
Вместо:
#pragma surface surf Lambert

Нписать:
#pragma surface surf NoLight

half4 LightingNoLight (SurfaceOutput s, half3 lightDir, half atten) {
          half4 c;
          c.rgb = s.Albedo;
          c.a = s.Alpha;
          return c;
        }
Worker
UNец
 
Сообщения: 30
Зарегистрирован: 11 ноя 2010, 15:50


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

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

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