Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
- // Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
- // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
- // Simplified VertexLit shader, optimized for high-poly meshes. Differences from regular VertexLit one:
- // - less per-vertex work compared with Mobile-VertexLit
- // - supports only DIRECTIONAL lights and ambient term, saves some vertex processing power
- // - no per-material color
- // - no specular
- // - no emission
- Shader "Codezone/VertexLitSkew (Only Directional Lights)"
- {
- Properties
- {
- _MainTex("Base (RGB)", 2D) = "white" {}
- _Offset("Offset", Vector) = (0,0,0,0)
- _Skew("Skew", Vector) = (0,0,0,0)
- }
- SubShader
- {
- Tags
- {
- "RenderType" = "Opaque"
- }
- LOD 80
- Pass
- {
- Name "FORWARD"
- Tags
- {
- "LightMode" = "ForwardBase"
- }
- CGPROGRAM
- #pragma vertex vert_surf
- #pragma fragment frag_surf
- #pragma target 2.0
- #pragma multi_compile_fwdbase
- #pragma multi_compile_fog
- #include "HLSLSupport.cginc"
- #include "UnityCG.cginc"
- #include "Lighting.cginc"
- #include "AutoLight.cginc"
- inline float3 LightingLambertVS(float3 normal, float3 lightDir)
- {
- fixed diff = max(0, dot(normal, lightDir));
- return _LightColor0.rgb * diff;
- }
- sampler2D _MainTex;
- fixed4 _Skew;
- fixed4 _Offset;
- struct Input
- {
- float2 uv_MainTex;
- };
- void surf(Input IN, inout SurfaceOutput o)
- {
- half4 c = tex2D(_MainTex, IN.uv_MainTex);
- o.Albedo = c.rgb;
- o.Alpha = c.a;
- }
- struct v2f_surf
- {
- float4 pos : SV_POSITION;
- float2 pack0 : TEXCOORD0;
- #ifndef LIGHTMAP_ON
- fixed3 normal : TEXCOORD1;
- #endif
- #ifdef LIGHTMAP_ON
- float2 lmap : TEXCOORD2;
- #endif
- #ifndef LIGHTMAP_ON
- fixed3 vlight : TEXCOORD2;
- #endif
- LIGHTING_COORDS(3,4)
- UNITY_FOG_COORDS(5)
- UNITY_VERTEX_OUTPUT_STEREO
- };
- float4 _MainTex_ST;
- v2f_surf vert_surf(appdata_full v)
- {
- v2f_surf o;
- Vector VScreen = mul(UNITY_MATRIX_MV, v.vertex);
- VScreen.x += _Offset.x + (_Skew.x * v.vertex.y);
- VScreen.y += _Offset.y + (_Skew.y * v.vertex.y);
- VScreen.z += _Offset.z + (_Skew.z * v.vertex.y);
- v.vertex = mul(VScreen, UNITY_MATRIX_IT_MV);
- UNITY_SETUP_INSTANCE_ID(v);
- UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
- o.pos = UnityObjectToClipPos(v.vertex);
- o.pack0.xy = TRANSFORM_TEX(v.texcoord, _MainTex);
- #ifdef LIGHTMAP_ON
- o.lmap.xy = v.texcoord1.xy * unity_LightmapST.xy + unity_LightmapST.zw;
- #endif
- float3 worldN = UnityObjectToWorldNormal(v.normal);
- #ifndef LIGHTMAP_ON
- o.normal = worldN;
- o.vlight = ShadeSH9(float4(worldN,1.0));
- o.vlight += LightingLambertVS(worldN, _WorldSpaceLightPos0.xyz);
- #endif
- TRANSFER_VERTEX_TO_FRAGMENT(o);
- UNITY_TRANSFER_FOG(o,o.pos);
- return o;
- }
- fixed4 frag_surf(v2f_surf IN) : SV_Target
- {
- Input surfIN;
- surfIN.uv_MainTex = IN.pack0.xy;
- SurfaceOutput o;
- o.Albedo = 0.0;
- o.Emission = 0.0;
- o.Specular = 0.0;
- o.Alpha = 0.0;
- o.Gloss = 0.0;
- #ifndef LIGHTMAP_ON
- o.Normal = IN.normal;
- #else
- o.Normal = 0;
- #endif
- surf(surfIN, o);
- fixed atten = LIGHT_ATTENUATION(IN);
- fixed4 c = 0;
- #ifndef LIGHTMAP_ON
- c.rgb = o.Albedo * IN.vlight * atten;
- #endif
- #ifdef LIGHTMAP_ON
- fixed3 lm = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, IN.lmap.xy));
- #ifdef SHADOWS_SCREEN
- c.rgb += o.Albedo * min(lm, atten * 2);
- #else
- c.rgb += o.Albedo * lm;
- #endif
- c.a = o.Alpha;
- #endif
- UNITY_APPLY_FOG(IN.fogCoord, c);
- UNITY_OPAQUE_ALPHA(c.a);
- return c;
- }
- ENDCG
- }
- }
- FallBack "Mobile/VertexLit"
- }
Advertisement