Unity製作360°全景背景(內部可見shader)
阿新 • • 發佈:2018-12-12
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 } } }