T4M World Projection Shader.shader 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
  2. Shader "T4MShaders/ShaderModel2/Diffuse/T4M World Projection Shader" {
  3. Properties {
  4. _UpSide ("Up/Side Fighting", Float) = 2.5
  5. _Blend ("Blend Factor", Float) = 4
  6. _Tiling ("Up Texture Tiling (x/y) Side Texture Tiling (z/w)", Vector) = (0.5,0.5,0.5,0.5)
  7. _Splat0 ("Up Textue", 2D) = "white" {}
  8. _Splat1 ("Side Textue", 2D) = "white" {}
  9. _Control ("Never Used", 2D) = "white" {}
  10. _MainTex ("Never Used", 2D) = "white" {}
  11. }
  12. Category {
  13. SubShader {
  14. CGPROGRAM
  15. #pragma surface surf Lambert vertex:vert
  16. float _UpSide;
  17. float _Blend;
  18. float4 _Tiling;
  19. sampler2D _Splat0;
  20. sampler2D _Splat1;
  21. struct Input {
  22. float3 vertex;
  23. float3 normal;
  24. float3 worldPos;
  25. float3 worldNormal;
  26. };
  27. void vert (inout appdata_full v, out Input o) {
  28. UNITY_INITIALIZE_OUTPUT(Input, o);
  29. o.worldNormal = mul(unity_ObjectToWorld, float4(v.normal, 0.0f)).xyz;
  30. o.worldPos = mul(unity_ObjectToWorld, v.vertex);
  31. }
  32. void surf (Input IN, inout SurfaceOutput o) {
  33. float2 SideTile = float2(_Tiling.z/10, _Tiling.w/10);
  34. fixed3 Up = tex2D (_Splat0, float2(_Tiling.x/10, _Tiling.y/10) *IN.worldPos.zx);
  35. fixed3 Side = tex2D (_Splat1, SideTile *IN.worldPos.xy);
  36. fixed3 Side2 = tex2D (_Splat1, SideTile *IN.worldPos.zy);
  37. fixed3 projnormal = saturate(pow(normalize(IN.worldNormal)*_UpSide, _Blend));
  38. o.Albedo.rgb = lerp(lerp(Up, Side, projnormal.z), Side2, projnormal.x);
  39. o.Alpha = 0.0;
  40. }
  41. ENDCG
  42. }
  43. }
  44. ////FallBack "Diffuse"
  45. }