ShowNormals.shader 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. Shader "Hidden/ShowNormals"
  2. {
  3. SubShader
  4. {
  5. Tags { "RenderType"="Opaque" }
  6. LOD 100
  7. Pass
  8. {
  9. CGPROGRAM
  10. #pragma vertex vert
  11. #pragma fragment frag
  12. #include "UnityCG.cginc"
  13. struct appdata
  14. {
  15. float4 vertex : POSITION;
  16. float3 normal : NORMAL;
  17. float4 tangent : TANGENT;
  18. float2 uv : TEXCOORD0;
  19. };
  20. struct v2f
  21. {
  22. float4 vertex : SV_POSITION;
  23. float2 uv : TEXCOORD0;
  24. float3x3 rotation : TEXCOORD1;
  25. };
  26. v2f vert (appdata v)
  27. {
  28. v2f o;
  29. o.vertex = UnityObjectToClipPos(v.vertex);
  30. float3 binormal = cross(v.normal, v.tangent.xyz) * v.tangent.w;
  31. o.rotation = transpose(float3x3(v.tangent.xyz, binormal, v.normal));
  32. o.uv = v.uv;
  33. return o;
  34. }
  35. sampler2D _BumpMap;
  36. fixed4 frag(v2f i) : SV_Target
  37. {
  38. float3 normal = tex2D(_BumpMap, i.uv);
  39. normal = (normal * 2.0) - 1.0;
  40. normal = mul(i.rotation, normal);
  41. normal = (normal * 0.5) + 0.5;
  42. return float4(normal, 1.0);
  43. }
  44. ENDCG
  45. }
  46. }
  47. }