Preview_ViewVector.shader 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. Shader "Hidden/ViewVector"
  2. {
  3. CGINCLUDE
  4. #include "Preview.cginc"
  5. ENDCG
  6. SubShader
  7. {
  8. Pass // 0 => Tangent Space
  9. {
  10. CGPROGRAM
  11. #include "UnityCG.cginc"
  12. #include "Preview.cginc"
  13. #pragma vertex vert_img
  14. #pragma fragment frag
  15. float4 frag(v2f_img i) : SV_Target
  16. {
  17. float3 vertexPos = PreviewFragmentPositionOS( i.uv );
  18. float3 worldViewDir = normalize(preview_WorldSpaceCameraPos - vertexPos);
  19. float3 normal = normalize(vertexPos);
  20. float3 worldNormal = UnityObjectToWorldNormal(normal);
  21. float3 tangent = PreviewFragmentTangentOS( i.uv );
  22. float3 worldPos = mul(unity_ObjectToWorld, float4(vertexPos,1)).xyz;
  23. float3 worldTangent = UnityObjectToWorldDir(tangent);
  24. float tangentSign = -1;
  25. float3 worldBinormal = normalize( cross(worldNormal, worldTangent) * tangentSign);
  26. float4 tSpace0 = float4(worldTangent.x, worldBinormal.x, worldNormal.x, worldPos.x);
  27. float4 tSpace1 = float4(worldTangent.y, worldBinormal.y, worldNormal.y, worldPos.y);
  28. float4 tSpace2 = float4(worldTangent.z, worldBinormal.z, worldNormal.z, worldPos.z);
  29. fixed3 viewDirTan = tSpace0.xyz * worldViewDir.x + tSpace1.xyz * worldViewDir.y + tSpace2.xyz * worldViewDir.z;
  30. return float4(viewDirTan, 1);
  31. }
  32. ENDCG
  33. }
  34. Pass // 1 => World Space
  35. {
  36. CGPROGRAM
  37. #include "UnityCG.cginc"
  38. #include "Preview.cginc"
  39. #pragma vertex vert_img
  40. #pragma fragment frag
  41. float4 frag(v2f_img i) : SV_Target
  42. {
  43. float3 vertexPos = PreviewFragmentPositionOS( i.uv );
  44. float3 worldViewDir = PreviewWorldSpaceViewDir( vertexPos, false );
  45. return float4(worldViewDir, 1);
  46. }
  47. ENDCG
  48. }
  49. Pass // 2 => Object Space
  50. {
  51. CGPROGRAM
  52. #include "UnityCG.cginc"
  53. #include "Preview.cginc"
  54. #pragma vertex vert_img
  55. #pragma fragment frag
  56. float4 frag(v2f_img i) : SV_Target
  57. {
  58. float3 vertexPos = PreviewFragmentPositionOS( i.uv );
  59. float3 worldViewDir = PreviewWorldSpaceViewDir( vertexPos, false );
  60. float3 objViewDir = PreviewWorldToObjectDir( worldViewDir, false );
  61. return float4(objViewDir, 1);
  62. }
  63. ENDCG
  64. }
  65. Pass // 3 => View Space
  66. {
  67. CGPROGRAM
  68. #include "UnityCG.cginc"
  69. #include "Preview.cginc"
  70. #pragma vertex vert_img
  71. #pragma fragment frag
  72. float4 frag(v2f_img i) : SV_Target
  73. {
  74. float3 vertexPos = PreviewFragmentPositionOS( i.uv );
  75. float3 normal = PreviewFragmentNormalOS( i.uv );
  76. float3 worldViewDir = PreviewWorldSpaceViewDir( vertexPos, false );
  77. float3 viewViewDir = PreviewWorldToViewDir( worldViewDir, false );
  78. return float4(viewViewDir, 1);
  79. }
  80. ENDCG
  81. }
  82. }
  83. }