Unity制作360°全景背景(内部可见shader)

Unity项目中经常会出现非全封闭式的建筑场景,玩家能看到场景之外的一些内容(不可避免),就需要有一个360°无死角的全景背景来避免穿帮,而不是使用Unity自带的虚空作为背景。

制作全景背景有两种方式:

1.制作全景天空盒。借助第三方软件将360度全景图片转换为6面立方体图片,然后新建材质设置Shader为Skybox/6 Sided,再将6张图片赋值给Shader即完成天空盒材质的制作,替换当前天空盒材质即可看到效果。

2.创建全景球形空间。首先新建一个球并且进行放大,然后新建材质设置Shader为Custom/InsideVisible,将全景图赋给Shader即可。步骤如下

Unity制作360°全景背景(内部可见shader)_第1张图片

Unity制作360°全景背景(内部可见shader)_第2张图片

Unity制作360°全景背景(内部可见shader)_第3张图片

Unity制作360°全景背景(内部可见shader)_第4张图片

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
	}
}
}

 

你可能感兴趣的:(Unity)