Preview_SamplerNode.shader 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. Shader "Hidden/SamplerNode"
  2. {
  3. Properties
  4. {
  5. _B ("_UVs", 2D) = "white" {}
  6. _C ("_Level", 2D) = "white" {}
  7. _F ("_NormalScale", 2D) = "white" {}
  8. _G ("Index", 2D) = "white" {}
  9. _CustomUVs ("_CustomUVs", Int) = 0
  10. _Unpack ("_Unpack", Int) = 0
  11. _LodType ("_LodType", Int) = 0
  12. _Sampler ("_Sampler", 2D) = "white" {}
  13. _Sampler3D ("_Sampler3D", 3D) = "white" {}
  14. _Array ("_Array", 2DArray) = "white" {}
  15. _Cube( "_Cube", CUBE) = "white" {}
  16. _Default ("_Default", Int) = 0
  17. _Type ("_Type", Int) = 0
  18. }
  19. SubShader
  20. {
  21. Pass
  22. {
  23. CGPROGRAM
  24. #pragma vertex vert_img
  25. #pragma fragment frag
  26. #pragma target 3.5
  27. #include "UnityCG.cginc"
  28. #include "Preview.cginc"
  29. #include "UnityStandardUtils.cginc"
  30. sampler2D _F;
  31. int _CustomUVs;
  32. int _Unpack;
  33. int _Default;
  34. float4 frag( v2f_img i ) : SV_Target
  35. {
  36. const float3 white = float3( 1, 1, 1 );
  37. const float3 black = float3( 0, 0, 0 );
  38. const float3 grey = GammaToLinearSpace( 127.0 / 255.0 ).xxx;
  39. const float3 bump = float3( 0.5, 0.5, 1 );
  40. const float3 linearGrey = ( 127.0 / 255.0 ).xxx;
  41. const float3 red = float3( 1, 0, 0 );
  42. float4 result = float4( 0, 0, 0, 1 );
  43. switch ( _Default )
  44. {
  45. case 1: result.rgb = white; break;
  46. case 2: result.rgb = black; break;
  47. case 3: result.rgb = grey; break;
  48. case 4: result.rgb = ( _Unpack == 1 ) ? UnpackScaleNormal( bump.xxyy, tex2D( _F, i.uv ).r ) : bump; break;
  49. case 5: result.rgb = linearGrey; break;
  50. case 6: result.rgb = red; break;
  51. }
  52. return result;
  53. }
  54. ENDCG
  55. }
  56. Pass
  57. {
  58. CGPROGRAM
  59. #pragma vertex vert_img
  60. #pragma fragment frag
  61. #pragma target 3.5
  62. #include "UnityCG.cginc"
  63. #include "Preview.cginc"
  64. #include "UnityStandardUtils.cginc"
  65. sampler2D _B;
  66. sampler2D _C;
  67. sampler2D _F;
  68. sampler2D _G;
  69. int _CustomUVs;
  70. int _Unpack;
  71. int _LodType;
  72. UNITY_DECLARE_TEX2DARRAY (_Array);
  73. samplerCUBE _Cube;
  74. sampler2D _Sampler;
  75. sampler3D _Sampler3D;
  76. int _Type;
  77. float4 frag (v2f_img i) : SV_Target
  78. {
  79. if (_Type == 4)
  80. {
  81. return UNITY_SAMPLE_TEX2DARRAY ( _Array, float3(i.uv, tex2D( _G, i.uv ).r ) );
  82. }
  83. else if (_Type == 3)
  84. {
  85. float3 uvs = float3(i.uv,0);
  86. if (_CustomUVs == 1)
  87. uvs = tex2D (_B, i.uv).xyz;
  88. return texCUBE (_Cube, uvs);
  89. }
  90. else if (_Type == 2)
  91. {
  92. return tex3D (_Sampler3D, float3(i.uv,0));
  93. }
  94. else
  95. {
  96. float2 uvs = i.uv;
  97. float4 c = 0;
  98. if (_CustomUVs == 1)
  99. uvs = tex2D (_B, i.uv).xy;
  100. if (_LodType == 1)
  101. {
  102. float lod = tex2D (_C, i.uv).r;
  103. c = tex2Dlod (_Sampler, float4(uvs,0,lod));
  104. }
  105. else if (_LodType == 2)
  106. {
  107. float bias = tex2D (_C, i.uv).r;
  108. c = tex2Dbias (_Sampler, float4(uvs,0,bias));
  109. }
  110. else
  111. {
  112. c = tex2D (_Sampler, uvs);
  113. }
  114. if (_Unpack == 1)
  115. {
  116. float nscale = tex2D (_F, i.uv).r;
  117. c.rgb = UnpackScaleNormal (c, nscale);
  118. }
  119. return c;
  120. }
  121. }
  122. ENDCG
  123. }
  124. }
  125. }