v2f vert (appdata v)
{
    v2f o = (v2f)0;
    UNITY_SETUP_INSTANCE_ID(v);
    UNITY_INITIALIZE_OUTPUT(v2f, o);
    UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
    UNITY_TRANSFER_INSTANCE_ID(v, o);
    o.pos = UnityObjectToClipPos(v.vertex);
    o.wPos = mul(unity_ObjectToWorld, v.vertex);
    o.vDir = WorldSpaceViewDir(v.vertex);
    o.wNorm = UnityObjectToWorldNormal(v.normal);
    o.wTan = UnityObjectToWorldDir(v.tangent.xyz);
    o.wBiTan = cross(o.wNorm, o.wTan) * v.tangent.w * unity_WorldTransformParams.w;
    o.uv = v.uv;
    #if !defined(UNITY_PASS_SHADOWCASTER)
        UNITY_TRANSFER_SHADOW(o, o.uv);
        UNITY_TRANSFER_FOG(o, o.pos);
    #else
        TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos);
    #endif
    return o;
}