Шэйдеры для sprite

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

Шэйдеры для sprite

Сообщение Eric_Cartman4815 18 июл 2017, 15:11

Привет. Помогите пожалуйста с написанием шэйдера для спрайтов.
У меня есть модель 2д героя из нескольких спрайтов, которая помещена в трехмерное окружение. Мне требуется чтобы герой принимал и отбрасывал тени, как полноценный трехмерный объект только плоский.
т.к. станадртными средствами тени на спрайтах не получить, то есть вот такой шэйдер:
Синтаксис:
Используется csharp
Shader "Custom/NewSurfaceShader" {
        Properties {
                [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
                _Color ("Color", Color) = (1,1,1,1)
                _Cutoff("Shadow alpha cutoff", Range(0,1)) = 0.5
        }
        SubShader {
                Tags {
                        "Queue"="AlphaTest"
                        "RenderType"="TransparentCutout"
                }
                LOD 200
                Zwrite On
               
                CGPROGRAM
                #pragma surface surf Lambert addshadow fullforwardshadows

                sampler2D _MainTex;
                fixed4 _Color;
                fixed _Cutoff;
       
                struct Input {
                        float2 uv_MainTex;
                };

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

Теперь Спрайты принимают и отбрасывают тени как надо. Но появилась проблема в том, что модель героя сборная, и пока это обычный спрайт - неважно где он находится по отношению к другим спрайтам, их порядок отображения зависит только от order in layer. Однако после применения Zwrite On порядок теперь зависит от их положения, как у 3д объектов, что совершенно не подходит. Можно добавить Ztest Off и механика слоев снова вернется, но тогда спрайты отображаются поверх всех объектов и его невозможно перекрыть. Есть ли какой-нибудь выход из этой ситуации? Нужно чтобы спрайты принимали и отбрасывали тени как 3д объекты, а в остальном оставались спрайтами и подчинялись сортировке по слоям.
Заранее спасибо!
Eric_Cartman4815
UNец
 
Сообщения: 23
Зарегистрирован: 26 сен 2014, 21:43

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

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

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