Selzier

360EquirectangularShader

Mar 22nd, 2017
369
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.20 KB | None | 0 0
  1. Shader "360/Equirectangular"
  2. {
  3.     Properties
  4.     {
  5.         _MainTex ("Diffuse (RGB) Alpha (A)", 2D) = "gray" {}
  6.     }
  7.  
  8.     SubShader
  9.     {
  10.         Pass
  11.         {
  12.             Tags {"LightMode" = "Always"}
  13.  
  14.             Cull Front
  15.  
  16.             CGPROGRAM
  17.             #pragma vertex vert
  18.             #pragma fragment frag
  19.             #pragma target 3.0
  20.  
  21.             #include "UnityCG.cginc"
  22.  
  23.             struct v2f
  24.             {
  25.                 float4 pos : SV_POSITION;
  26.                 float3 normal : TEXCOORD0;
  27.             };
  28.  
  29.             v2f vert(float4 vertex : POSITION, float3 normal : NORMAL)
  30.             {
  31.                 v2f outCoords = { UnityObjectToClipPos(vertex), normal };
  32.                 return outCoords;
  33.             }
  34.  
  35.             #define ONE_OVER_PI .31830988618379067154F
  36.  
  37.             inline float2 ToRadialCoords(float3 coords)
  38.             {
  39.                 float3 normalizedCoords = normalize(coords);
  40.                 float latitude = acos(normalizedCoords.y);
  41.                 float longitude = atan2(normalizedCoords.z, normalizedCoords.x);
  42.                 float2 sphereCoords = float2(longitude, latitude) * ONE_OVER_PI;
  43.                 return float2(0.5F - sphereCoords.x * 0.5F, 1.0F - sphereCoords.y);
  44.             }
  45.  
  46.             sampler2D _MainTex;
  47.  
  48.             float4 frag(float3 coords : TEXCOORD0) : SV_Target
  49.             {
  50.                 float2 equirectangularUV = ToRadialCoords(coords);
  51.                 return tex2D(_MainTex, equirectangularUV);
  52.             }
  53.             ENDCG
  54.         }
  55.     }
  56.     FallBack "VertexLit"
  57. }
Advertisement
Add Comment
Please, Sign In to add comment