Unity 場景分頁插件 World Streamer 支持無限大地圖的解決方案(二)


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"
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM