Diffuse.shader 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. Shader "MTE/Surface/4 Textures/Diffuse"
  2. {
  3. Properties
  4. {
  5. _Control ("Control (RGBA)", 2D) = "red" {}
  6. _Splat0 ("Layer 1", 2D) = "white" {}
  7. _Splat1 ("Layer 2", 2D) = "white" {}
  8. _Splat2 ("Layer 3", 2D) = "white" {}
  9. _Splat3 ("Layer 4", 2D) = "white" {}
  10. }
  11. CGINCLUDE
  12. #pragma surface surf Lambert vertex:MTE_SplatmapVert finalcolor:MTE_SplatmapFinalColor finalprepass:MTE_SplatmapFinalPrepass finalgbuffer:MTE_SplatmapFinalGBuffer
  13. #pragma multi_compile_fog
  14. struct Input
  15. {
  16. float2 tc_Control : TEXCOORD0;
  17. float4 tc_Splat01 : TEXCOORD1;
  18. float4 tc_Splat23 : TEXCOORD2;
  19. UNITY_FOG_COORDS(3)
  20. };
  21. sampler2D _Control;
  22. float4 _Control_ST;
  23. sampler2D _Splat0,_Splat1,_Splat2,_Splat3;
  24. float4 _Splat0_ST,_Splat1_ST,_Splat2_ST,_Splat3_ST;
  25. #include "../../MTECommon.hlsl"
  26. void MTE_SplatmapVert(inout appdata_full v, out Input data)
  27. {
  28. UNITY_INITIALIZE_OUTPUT(Input, data);
  29. data.tc_Control.xy = TRANSFORM_TEX(v.texcoord, _Control);
  30. data.tc_Splat01.xy = TRANSFORM_TEX(v.texcoord, _Splat0);
  31. data.tc_Splat01.zw = TRANSFORM_TEX(v.texcoord, _Splat1);
  32. data.tc_Splat23.xy = TRANSFORM_TEX(v.texcoord, _Splat2);
  33. data.tc_Splat23.zw = TRANSFORM_TEX(v.texcoord, _Splat3);
  34. float4 pos = UnityObjectToClipPos (v.vertex);
  35. UNITY_TRANSFER_FOG(data, pos);
  36. }
  37. void MTE_SplatmapMix(Input IN, out half weight, out fixed4 mixedDiffuse)
  38. {
  39. half4 splat_control = tex2D(_Control, IN.tc_Control.xy);
  40. weight = dot(splat_control, half4(1, 1, 1, 1));
  41. splat_control /= (weight + 1e-3f);
  42. mixedDiffuse = 0.0f;
  43. mixedDiffuse += splat_control.r * tex2D(_Splat0, IN.tc_Splat01.xy);
  44. mixedDiffuse += splat_control.g * tex2D(_Splat1, IN.tc_Splat01.zw);
  45. mixedDiffuse += splat_control.b * tex2D(_Splat2, IN.tc_Splat23.xy);
  46. mixedDiffuse += splat_control.a * tex2D(_Splat3, IN.tc_Splat23.zw);
  47. }
  48. void surf(Input IN, inout SurfaceOutput o)
  49. {
  50. fixed4 mixedDiffuse;
  51. half weight;
  52. MTE_SplatmapMix(IN, weight, mixedDiffuse);
  53. o.Albedo = mixedDiffuse.rgb;
  54. o.Alpha = weight;
  55. }
  56. ENDCG
  57. Category
  58. {
  59. Tags
  60. {
  61. "Queue" = "Geometry-99"
  62. "RenderType" = "Opaque"
  63. }
  64. SubShader//for target 3.0+
  65. {
  66. CGPROGRAM
  67. #pragma target 3.0
  68. ENDCG
  69. }
  70. SubShader//for target 2.5
  71. {
  72. CGPROGRAM
  73. #pragma target 2.5
  74. ENDCG
  75. }
  76. SubShader//for target 2.0
  77. {
  78. CGPROGRAM
  79. #pragma target 2.0
  80. ENDCG
  81. }
  82. }
  83. Fallback "Diffuse"
  84. CustomEditor "MTE.MTEShaderGUI"
  85. }