johnhattan

Untitled

Sep 7th, 2017
809
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
  2.  
  3. // Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
  4.  
  5. // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
  6.  
  7. // Simplified VertexLit shader, optimized for high-poly meshes. Differences from regular VertexLit one:
  8. // - less per-vertex work compared with Mobile-VertexLit
  9. // - supports only DIRECTIONAL lights and ambient term, saves some vertex processing power
  10. // - no per-material color
  11. // - no specular
  12. // - no emission
  13.  
  14. Shader "Codezone/VertexLitSkew (Only Directional Lights)"
  15. {
  16.     Properties
  17.     {
  18.         _MainTex("Base (RGB)", 2D) = "white" {}
  19.         _Offset("Offset", Vector) = (0,0,0,0)
  20.         _Skew("Skew", Vector) = (0,0,0,0)
  21.     }
  22.  
  23.     SubShader
  24.     {
  25.         Tags
  26.         {
  27.             "RenderType" = "Opaque"
  28.         }
  29.         LOD 80
  30.  
  31.         Pass
  32.         {
  33.             Name "FORWARD"
  34.             Tags
  35.             {
  36.                 "LightMode" = "ForwardBase"
  37.             }
  38.  
  39.             CGPROGRAM
  40.                 #pragma vertex vert_surf
  41.                 #pragma fragment frag_surf
  42.                 #pragma target 2.0
  43.                 #pragma multi_compile_fwdbase
  44.                 #pragma multi_compile_fog
  45.                 #include "HLSLSupport.cginc"
  46.                 #include "UnityCG.cginc"
  47.                 #include "Lighting.cginc"
  48.                 #include "AutoLight.cginc"
  49.  
  50.                 inline float3 LightingLambertVS(float3 normal, float3 lightDir)
  51.                 {
  52.                     fixed diff = max(0, dot(normal, lightDir));
  53.                     return _LightColor0.rgb * diff;
  54.                 }
  55.  
  56.                 sampler2D _MainTex;
  57.                 fixed4 _Skew;
  58.                 fixed4 _Offset;
  59.  
  60.                 struct Input
  61.                 {
  62.                     float2 uv_MainTex;
  63.                 };
  64.  
  65.                 void surf(Input IN, inout SurfaceOutput o)
  66.                 {
  67.                     half4 c = tex2D(_MainTex, IN.uv_MainTex);
  68.                     o.Albedo = c.rgb;
  69.                     o.Alpha = c.a;
  70.                 }
  71.  
  72.                 struct v2f_surf
  73.                 {
  74.                     float4 pos : SV_POSITION;
  75.                     float2 pack0 : TEXCOORD0;
  76.                     #ifndef LIGHTMAP_ON
  77.                     fixed3 normal : TEXCOORD1;
  78.                     #endif
  79.  
  80.                     #ifdef LIGHTMAP_ON
  81.                     float2 lmap : TEXCOORD2;
  82.                     #endif
  83.  
  84.                     #ifndef LIGHTMAP_ON
  85.                     fixed3 vlight : TEXCOORD2;
  86.                     #endif
  87.                     LIGHTING_COORDS(3,4)
  88.                     UNITY_FOG_COORDS(5)
  89.                     UNITY_VERTEX_OUTPUT_STEREO
  90.                 };
  91.  
  92.                 float4 _MainTex_ST;
  93.  
  94.                 v2f_surf vert_surf(appdata_full v)
  95.                 {
  96.                     v2f_surf o;
  97.  
  98.                     Vector VScreen = mul(UNITY_MATRIX_MV, v.vertex);
  99.                     VScreen.x += _Offset.x + (_Skew.x * v.vertex.y);
  100.                     VScreen.y += _Offset.y + (_Skew.y * v.vertex.y);
  101.                     VScreen.z += _Offset.z + (_Skew.z * v.vertex.y);
  102.                     v.vertex = mul(VScreen, UNITY_MATRIX_IT_MV);
  103.  
  104.                     UNITY_SETUP_INSTANCE_ID(v);
  105.                     UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
  106.                     o.pos = UnityObjectToClipPos(v.vertex);
  107.                     o.pack0.xy = TRANSFORM_TEX(v.texcoord, _MainTex);
  108.  
  109.                     #ifdef LIGHTMAP_ON
  110.                     o.lmap.xy = v.texcoord1.xy * unity_LightmapST.xy + unity_LightmapST.zw;
  111.                     #endif
  112.  
  113.                     float3 worldN = UnityObjectToWorldNormal(v.normal);
  114.  
  115.                     #ifndef LIGHTMAP_ON
  116.                     o.normal = worldN;
  117.                     o.vlight = ShadeSH9(float4(worldN,1.0));
  118.                     o.vlight += LightingLambertVS(worldN, _WorldSpaceLightPos0.xyz);
  119.                     #endif
  120.  
  121.                     TRANSFER_VERTEX_TO_FRAGMENT(o);
  122.                     UNITY_TRANSFER_FOG(o,o.pos);
  123.                     return o;
  124.                 }
  125.  
  126.                 fixed4 frag_surf(v2f_surf IN) : SV_Target
  127.                 {
  128.                     Input surfIN;
  129.                     surfIN.uv_MainTex = IN.pack0.xy;
  130.                     SurfaceOutput o;
  131.                     o.Albedo = 0.0;
  132.                     o.Emission = 0.0;
  133.                     o.Specular = 0.0;
  134.                     o.Alpha = 0.0;
  135.                     o.Gloss = 0.0;
  136.  
  137.                     #ifndef LIGHTMAP_ON
  138.                     o.Normal = IN.normal;
  139.                     #else
  140.                     o.Normal = 0;
  141.                     #endif
  142.  
  143.                     surf(surfIN, o);
  144.                     fixed atten = LIGHT_ATTENUATION(IN);
  145.                     fixed4 c = 0;
  146.  
  147.                     #ifndef LIGHTMAP_ON
  148.                     c.rgb = o.Albedo * IN.vlight * atten;
  149.                     #endif
  150.  
  151.                     #ifdef LIGHTMAP_ON
  152.                     fixed3 lm = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, IN.lmap.xy));
  153.                     #ifdef SHADOWS_SCREEN
  154.                     c.rgb += o.Albedo * min(lm, atten * 2);
  155.                     #else
  156.                     c.rgb += o.Albedo * lm;
  157.                     #endif
  158.                     c.a = o.Alpha;
  159.                     #endif
  160.  
  161.                     UNITY_APPLY_FOG(IN.fogCoord, c);
  162.                     UNITY_OPAQUE_ALPHA(c.a);
  163.                     return c;
  164.                 }
  165.             ENDCG
  166.         }
  167.     }
  168.  
  169.     FallBack "Mobile/VertexLit"
  170. }
Advertisement