помогите разобраться с ShadowCollector

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

помогите разобраться с ShadowCollector

Сообщение passsha 14 ноя 2012, 23:07

Помогите разобраться, есть такой шейдер:

Синтаксис:
Используется csharp
Shader "Custom/Animation"
{

Properties
{
        _MainTex ("Texture", 2D) = "white" {}
        _DataTex ("Animation", 2D) = "white" {}
        _Timeline ("timeline", Range(0,1)) = 0.0
        _Scale ("scale", Float) = 100
        _TextureSize ("texture size", Float) = 512
        _VertexTotal ("vertex total", Float) = 4512
        _SamplesTotal ("samples total", Float) = 10
}

SubShader
{
Tags { "RenderType"="Opaque" }

Pass
{
        Name "Main"
        Tags { "LightMode" = "Vertex" }

        CGPROGRAM
        #pragma target 3.0
        #pragma vertex vert
        #pragma fragment frag
        #include "UnityCG.cginc"

        struct v2f
        {
            float4  pos : SV_POSITION;
            float2  uv : TEXCOORD0;
                fixed4 diff     : COLOR0;
        };

        sampler2D _DataTex;
        float _Timeline;
        float _Scale;
        float _TextureSize;
        float _VertexTotal;
        float _SamplesTotal;
        float4 _MainTex_ST;

        struct appdata
        {
            float4 vertex : POSITION;
            float3 normal : NORMAL;
            float2 texcoord : TEXCOORD0;
            float2 texcoord1 : TEXCOORD1;
        };

        #include "AnimationShader.cginc"

        v2f vert (appdata v)
        {
            v2f o;
            float4 position = AnimateVertex(v);
            o.pos = mul(UNITY_MATRIX_MVP, position);
            o.uv = TRANSFORM_TEX (v.texcoord, _MainTex);
                o.diff = fixed4(1,1,1,1);//max(0, dot(v.normal,_WorldSpaceLightPos0.xyz));
            return o;
        }

        sampler2D _MainTex;

        half4 frag (v2f i) : COLOR
        {
            half4 texcol = tex2D (_MainTex, i.uv) * i.diff;
            return texcol;
        }

    ENDCG
}

// Pass to render object as a shadow caster
Pass
{
        Name "ShadowCaster"
        Tags { "LightMode" = "ShadowCaster" }
       
        Fog {Mode Off}
        ZWrite On ZTest LEqual Cull Off
        Offset 1, 1
       
        CGPROGRAM
        #pragma target 3.0
        #pragma vertex vert
        #pragma fragment frag
        #pragma multi_compile_shadowcaster
        #pragma fragmentoption ARB_precision_hint_fastest
        #include "UnityCG.cginc"
       
        struct v2f
        {
                V2F_SHADOW_CASTER;
        };

        sampler2D _DataTex;
        float _Timeline;
        float _Scale;
        float _TextureSize;
        float _VertexTotal;
        float _SamplesTotal;

        struct appdata
        {
            float4 vertex : POSITION;
            float2 texcoord1 : TEXCOORD1;
        };

        #include "AnimationShader.cginc"
       
        v2f vert( appdata v )
        {
                v2f o;
            v.vertex = AnimateVertex(v);
                TRANSFER_SHADOW_CASTER(o)
                return o;
        }
       
        float4 frag( v2f i ) : COLOR
        {
                SHADOW_CASTER_FRAGMENT(i)
        }
        ENDCG
}

// Pass to render object as a shadow collector
Pass
{
        Name "ShadowCollector"
        Tags { "LightMode" = "ShadowCollector" }
       
        Fog {Mode Off}
        ZWrite On ZTest LEqual

        CGPROGRAM
        #pragma target 3.0
        #pragma vertex vert
        #pragma fragment frag
        #pragma fragmentoption ARB_precision_hint_fastest
        #pragma multi_compile_shadowcollector
       
        #define SHADOW_COLLECTOR_PASS
        #include "UnityCG.cginc"
       
        struct appdata
        {
            float4 vertex : POSITION;
            float2 texcoord1 : TEXCOORD1;
        };
       
                sampler2D _DataTex;
                float _Timeline;
                float _Scale;
                float _TextureSize;
                float _VertexTotal;
                float _SamplesTotal;
       
        struct v2f
        {
                V2F_SHADOW_COLLECTOR;
        };
       
        #include "AnimationShader.cginc"
       
        v2f vert (appdata v)
        {
                v2f o;
                v.vertex = AnimateVertex(v);
                TRANSFER_SHADOW_COLLECTOR(o)
                return o;
        }
       
        fixed4 frag (v2f i) : COLOR
        {
                SHADOW_COLLECTOR_FRAGMENT(i)
        }
        ENDCG
}

}
Fallback "VertexLit"
}
 


Все бы хорошо, но ShadowCollector не отображается. Если убрать проход Main, то видно некую призрачную фигуру на которую падает тень, а если включить то ничего.
passsha
UNец
 
Сообщения: 1
Зарегистрирован: 14 ноя 2012, 21:45

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

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

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