The easy way is to have Unity convert it into a cubemap for you: Select your texture, set the texture type to Cubemap, and mapping to Lat-Long. Unity - Manual: Cubemaps
Then make a new material and set it to use the skybox/cubemap shader and assign the new cubemap to it.
Alternatively you can write your own skybox shader that takes a regular texture and assumes it’s a lat-long.
edit: Or use this one I wrote and see why people don’t use equirectangular in real time (nasty seam). Cubemaps have special hardware level handling that deals with seams cleanly, where as there’s no hardware handling of equirectangular so you can get weird seams like this. There are ways to fix it, but that’s something someone else can deal with if you really don’t want to use the cubemap conversion.
Shader "Skybox/Equirectangular" {
Properties {
_Tint ("Tint Color", Color) = (.5, .5, .5, .5)
[Gamma] _Exposure ("Exposure", Range(0, 8)) = 1.0
_Rotation ("Rotation", Range(0, 360)) = 0
[NoScaleOffset] _Tex ("Panorama (HDR)", 2D) = "grey" {}
}
SubShader {
Tags { "Queue"="Background" "RenderType"="Background" "PreviewType"="Skybox" }
Cull Off ZWrite Off
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _Tex;
half4 _Tex_HDR;
half4 _Tint;
half _Exposure;
float _Rotation;
float4 RotateAroundYInDegrees (float4 vertex, float degrees)
{
float alpha = degrees * UNITY_PI / 180.0;
float sina, cosa;
sincos(alpha, sina, cosa);
float2x2 m = float2x2(cosa, -sina, sina, cosa);
return float4(mul(m, vertex.xz), vertex.yw).xzyw;
}
struct appdata_t {
float4 vertex : POSITION;
};
struct v2f {
float4 vertex : SV_POSITION;
float3 texcoord : TEXCOORD0;
};
v2f vert (appdata_t v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, RotateAroundYInDegrees(v.vertex, _Rotation));
o.texcoord = v.vertex.xyz;
return o;
}
fixed4 frag (v2f i) : SV_Target
{
float3 dir = normalize(i.texcoord);
float2 longlat = float2(atan2(dir.x, dir.z) + UNITY_PI, acos(-dir.y));
float2 uv = longlat / float2(2.0 * UNITY_PI, UNITY_PI);
half4 tex = tex2D (_Tex, uv);
half3 c = DecodeHDR (tex, _Tex_HDR);
c = c * _Tint.rgb * unity_ColorSpaceDouble.rgb;
c *= _Exposure;
return half4(c, 1);
}
ENDCG
}
}
Fallback Off
}