Unity 場景分頁外掛 World Streamer 支援無限大地圖的解決方案(二)
阿新 • • 發佈:2019-01-05
Terrain Streaming
可以用WorldCreator建立Tile地形,然後用WorldStreamer實現分塊地圖。比如10000*10000(16平方公里) 的地形,需要1000*1000的100個地塊。如果每次載入9個格子,那麼同時載入的地塊大小為3000*3000大小——比一次載入100000*10000要省掉 90%的資料——如果直接載入10000*10000估計Unity要跪了。似乎也可以500*500,載入25個地塊(保證1000左右的視野),總體數量要更小一些,但是地圖分塊卻更多了(400個)。
(一)基礎設定
如果想要分頁讀取Terrain,需要先把大塊Terrain處理成小塊,我使用的是WorldCreator Pro(189美金,巨貴無比)可以直接搞定這一步。
下面就需要思考了:
(1)不使用MeshTerrain作為低模LOD,那麼推薦3*3地表塊,每個地表塊的Size應該比FOV的最遠距離高個10%左右,以儘量使玩家不會看到地形載入的過程。
(2)使用Ring模式和低模LOG,可以使用較多的Load Range。
(3)純MeshTerrain,通常用於移動遊戲。
接下來的例子中我設定了一個6*6*500*500的地圖分塊,每個分塊是一個500*500的Unity Terrain
注意每個分塊的位置,應該是500的正數倍。 Streamer設定: 通常Terrain作為Major Streamer。如果還需要模型Terrain,那麼其將設定為Minor Streamer,因為Major只能有一個。 把指定的SceneCollection Prefab賦值給Streamer,就完成了Streamer與Scene Clips之間的聯動。 如果使用Unity Terrain,需要把Terrain Neighbour指令碼新增到MajorStreamer物件,並關聯他們。 (二)使用RingStreaming 和 MeshTerrain 作為Terrain的LOD 首先你需要一個外掛叫做Terrain To Mesh(https://www.assetstore.unity3d.com/cn/#!/content/47276)有錢的請支援正版,沒錢的可以去淘寶買個盜版…… 這個後期效率更不上的時候,可以搞一搞:).前期先不弄了。 這段官方說了一堆廢話,其實關鍵就是 MajorStreamer,不設定Ring Streamer,讀取範圍是 0~N MinorStreamer,設定RingSteamer,外圈讀取範圍是0~M(M>N),內圈起始範圍設定為N+1,確保外圈實際範圍是N+1~M。 也就是外圈低模和內圈高模,加起來是完整的,需要讀取的地塊。 (三)UnityTerrain優化議題 使用RingStreaming和低模Terrain,烘焙好的樹木 看不見的Terrain Disable掉(比如背後的)可以使用TerrainCullingSystem 使用優化的樹木管理工具:Critias Tree System 如果TextureStreaming出現問題,可以去設定"Async Upload Time Slice" 和 "Async Upload Buffer Size"
注意每個分塊的位置,應該是500的正數倍。 Streamer設定: 通常Terrain作為Major Streamer。如果還需要模型Terrain,那麼其將設定為Minor Streamer,因為Major只能有一個。 把指定的SceneCollection Prefab賦值給Streamer,就完成了Streamer與Scene Clips之間的聯動。 如果使用Unity Terrain,需要把Terrain Neighbour指令碼新增到MajorStreamer物件,並關聯他們。 (二)使用RingStreaming 和 MeshTerrain 作為Terrain的LOD 首先你需要一個外掛叫做Terrain To Mesh(https://www.assetstore.unity3d.com/cn/#!/content/47276)有錢的請支援正版,沒錢的可以去淘寶買個盜版…… 這個後期效率更不上的時候,可以搞一搞:).前期先不弄了。 這段官方說了一堆廢話,其實關鍵就是 MajorStreamer,不設定Ring Streamer,讀取範圍是 0~N MinorStreamer,設定RingSteamer,外圈讀取範圍是0~M(M>N),內圈起始範圍設定為N+1,確保外圈實際範圍是N+1~M。 也就是外圈低模和內圈高模,加起來是完整的,需要讀取的地塊。 (三)UnityTerrain優化議題 使用RingStreaming和低模Terrain,烘焙好的樹木 看不見的Terrain Disable掉(比如背後的)可以使用TerrainCullingSystem 使用優化的樹木管理工具:Critias Tree System 如果TextureStreaming出現問題,可以去設定"Async Upload Time Slice" 和 "Async Upload Buffer Size"