1. 程式人生 > >Unity製作360°全景背景(內部可見shader)

Unity製作360°全景背景(內部可見shader)

Unity專案中經常會出現非全封閉式的建築場景,玩家能看到場景之外的一些內容(不可避免),就需要有一個360°無死角的全景背景來避免穿幫,而不是使用Unity自帶的虛空作為背景。

製作全景背景有兩種方式:

1.製作全景天空盒。藉助第三方軟體將360度全景圖片轉換為6面立方體圖片,然後新建材質設定Shader為Skybox/6 Sided,再將6張圖片賦值給Shader即完成天空盒材質的製作,替換當前天空盒材質即可看到效果。

2.建立全景球形空間。首先新建一個球並且進行放大,然後新建材質設定Shader為Custom/InsideVisible,將全景圖賦給Shader即可。步驟如下

Shader程式碼如下:

Shader "Custom/InsideVisible" {
 
Properties {
	_MainTex ("Base (RGB)", 2D) = "white" {}
}
 
SubShader {
	Tags { "RenderType"="Opaque" }
	Cull front    // ADDED BY BERNIE, TO FLIP THE SURFACES
	LOD 100
	
	Pass {  
		CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			
			#include "UnityCG.cginc"
 
			struct appdata_t {
				float4 vertex : POSITION;
				float2 texcoord : TEXCOORD0;
			};
 
			struct v2f {
				float4 vertex : SV_POSITION;
				half2 texcoord : TEXCOORD0;
			};
 
			sampler2D _MainTex;
			float4 _MainTex_ST;
			
			v2f vert (appdata_t v)
			{
				v2f o;
				o.vertex = UnityObjectToClipPos(v.vertex);
				// ADDED BY BERNIE:
				v.texcoord.x = 1 - v.texcoord.x;				
				o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
				return o;
			}
			
			fixed4 frag (v2f i) : SV_Target
			{
				fixed4 col = tex2D(_MainTex, i.texcoord);
				return col;
			}
		ENDCG
	}
}
}