Sprite Diffuse Shadow

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

Sprite Diffuse Shadow

Сообщение SIT-X 30 авг 2015, 22:33

Здравствуйте. Пишу шейдер для спрайтов. Целью является создание Diffuse шейдера с поддержкой тени. Тень от спрайта есть, а вот сам спрайт отрисовывается некорректно. В чём может быть проблема? Шейдер и скриншот приложены.
Изображение
Синтаксис:
Используется glsl
Shader "Sprites/Shadow/Diffuse"
{
    Properties
    {
        [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
        _Color ("Tint", Color) = (1,1,1,1)
        [MaterialToggle] PixelSnap ("Pixel snap", Float) = 0
                _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
    }
 
    SubShader
    {
        Tags
        {
            "Queue"="Transparent"
            "IgnoreProjector"="True"
            "RenderType"="Transparent"
            "PreviewType"="Plane"
            "CanUseSpriteAtlas"="True"
        }
 
        Cull Off
        Lighting Off
        ZWrite Off
        Fog { Mode Off }
        Blend SrcAlpha OneMinusSrcAlpha
 
        CGPROGRAM

            #pragma surface surf Lambert alpha vertex:vert
            #pragma multi_compile DUMMY PIXELSNAP_ON

                        sampler2D _MainTex;
                        fixed4 _Color;

                        struct Input
                        {
                                float2 uv_MainTex;
                                fixed4 color: COLOR;
                        };
 
                        void vert(inout appdata_full v, out Input o)
                        {
                                UNITY_INITIALIZE_OUTPUT(Input, o);
                        }

                        void surf (Input IN, inout SurfaceOutput o)
                        {
                                fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * IN.color;
                                o.Albedo = c.rgb;
                                o.Alpha = c.a;
                        }

        ENDCG
        }

    Fallback "Transparent/Cutout/Diffuse"
}
 
SIT-X
UNец
 
Сообщения: 40
Зарегистрирован: 09 апр 2012, 20:37

Re: Sprite Diffuse Shadow

Сообщение jetyb 03 сен 2015, 10:51

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

                        fixed _Cutoff;
                        void surf (Input IN, inout SurfaceOutput o)
                        {
                                fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * IN.color;
                                o.Albedo = c.rgb;
                                o.Alpha = c.a;
                               clip(o.Alpha - _Cutoff);
                        }
 
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21

Re: Sprite Diffuse Shadow

Сообщение SIT-X 09 сен 2015, 00:56

jetyb писал(а):
Синтаксис:
Используется csharp

                        fixed _Cutoff;
                        void surf (Input IN, inout SurfaceOutput o)
                        {
                                fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * IN.color;
                                o.Albedo = c.rgb;
                                o.Alpha = c.a;
                               clip(o.Alpha - _Cutoff);
                        }
 

Благодарю за ответ, но есть ли способ без использования Cutoff? Всё же в изначальном изображении с альфа-каналом чётче выглядит, нежели обрезкой cutoff.
SIT-X
UNец
 
Сообщения: 40
Зарегистрирован: 09 апр 2012, 20:37

Re: Sprite Diffuse Shadow

Сообщение alt3d 15 сен 2015, 09:43

#pragma surface surf Lambert alpha vertex:vert

А если поменять "alpha" на "alpha:fade"?
alt3d
Старожил
 
Сообщения: 687
Зарегистрирован: 04 сен 2011, 21:19
  • Сайт
  • ICQ

Re: Sprite Diffuse Shadow

Сообщение SIT-X 16 сен 2015, 00:10

alt3d писал(а):
#pragma surface surf Lambert alpha vertex:vert

А если поменять "alpha" на "alpha:fade"?

Спасибо огромное! :)
Всё работает, как надо.
SIT-X
UNец
 
Сообщения: 40
Зарегистрирован: 09 апр 2012, 20:37


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

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

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