Прозрачный шейдер теней Unity5

Я использую следующий шейдер в Unity 4.6.2, но, к сожалению, он не работает в Unity5. У меня есть объект в сцене дополненной реальности (vuforia 4), и я хочу показать тени на плоскости, которая находится под объектом. Эта плоскость должна быть прозрачной и показывать только тени, как на картинке.

Как здесь на картинке

это шейдер, который работает в Unity 4.6.2

Shader "TransparentShadowShader" {

Properties
{
    _ShadowColor ("Shadow Color", Color) = (0,0,0,1)
}

Category {

Blend  SrcAlpha OneMinusSrcAlpha

Lighting Off
Zwrite Off
LOD 200


SubShader
{
    Tags { "RenderType"="Transparent" }

    CGPROGRAM
    #pragma surface surf Custom

    struct Input {
        float2 pos : POSITION;
    };

    uniform float4 _ShadowColor;

    void surf(Input IN, inout SurfaceOutput o)
    {
        //Pass through shadow colour to lighting model
        o.Albedo = _ShadowColor.rgb;
        o.Alpha  = _ShadowColor.a;
    }

    half4 LightingCustom(SurfaceOutput s, half3 lightDir, half3 viewDir, half atten)
    {
        half4 c;

        //Inverse illumination - atten accounts for shadowing
        c.rgb = s.Albedo.rgb * 1.0f-atten;
        c.a   = s.Alpha * 1.0f-atten;

        return c;
    }
    ENDCG
}
}

Fallback "VertexLit", 2

}

это то, что я получаю в unity5, используя этот шейдер

введите здесь описание изображения


person Jenny    schedule 21.04.2015    source источник
comment
Можете ли вы объяснить, почему шейдер не работает?   -  person bwroga    schedule 21.04.2015
comment
Я добавил изображение шейдера. Похоже, он перевернут или что-то в этом роде.   -  person Jenny    schedule 21.04.2015
comment
@ Дженни, ты нашел решение?   -  person Augmented Jacob    schedule 15.06.2015


Ответы (1)


Ладно, уже искал ответ на этом, все оказалось проще, чем ожидалось

Shader "Invisible/InvisibleShadowCaster" {
 SubShader {
     Tags { 
         "Queue"="Transparent"
         "RenderType"="Transparent" 
     }
     CGPROGRAM
     #pragma surface surf Lambert alpha addshadow

     struct Input {
         float nothing; // Just a dummy because surf expects something
     };

     void surf (Input IN, inout SurfaceOutput o) {
         o.Alpha = 0;
     }
     ENDCG
 } 
 FallBack "Diffuse"}

это отлично сработало для меня, попробуйте

person Démíð Edúardsson    schedule 21.04.2015
comment
спасибо за ответ, но я не вижу теней на своем самолете?! - person Jenny; 23.04.2015
comment
тогда я не знаю, попробуйте использовать стандартные шейдеры Unity 5 и посмотрите, что произойдет - person Démíð Edúardsson; 23.04.2015
comment
Вы использовали этот шейдер на самолете, верно? И у вас был объект поверх него, создающий тени? До сих пор не могу понять! :( - person Jenny; 15.06.2015
comment
Да, было бы здорово, если бы вы объяснили, что это за шейдер и как вы его использовали. - person Joe Strout; 16.09.2016