2015-10-18 109 views
1

我想將由許多對象組成的大場景流式傳輸給客戶端,但需要一些關於採取何種方法的建議。即使70%的遊戲尚未下載,我仍然知道PS4和Battle.NET可以傳輸遊戲,但通過我的18 Mbps連接,它們的工作速度非常快。通過互聯網流式傳輸巨大的3D場景

任何人都可以請幫我從哪裏開始,以及如何開始流式傳輸大場景?

回答

1

很多這些不一定流龐大的場面本身,如果「排場」意味着傳輸(每一個對象上的各個點,三角形,獨特的紋理等),最低級別的原始數據。

他們經常使用大量實例化數據來傳輸像「maps」這樣的更高級別的數據。例如,他們可能不會傳播森林中的一千棵樹的三角形。相反,他們可能傳輸一個獨特的樹資產,該資產被實例化並且剛剛縮放和旋轉,並且以不同的方式定位以形成森林(每個樹實例只是一個唯一的變換矩陣)。其結果可能是整個森林可以傳輸,而不是比單個樹的三角形更多的記憶。

它們可能具有兩個或更多字符網格,它們具有相同的幾何或拓撲結構以及唯一的變形(點位置)或紋理(「外觀」),從而顯着減少必須發送/存儲的唯一數據量。

在做這樣的實例化/平鋪的東西,否則可能是什麼TB的價值獨特的數據可以放入由於實例化,非唯一的數據量兆字節。

因此,通常這樣做的第一步是構建自己的關卡/地圖編輯器,例如,由於平鋪/實例化(共享)數據量很大,該級別/地圖編輯器通常可以序列化比Wavefront OBJ文件更高級別和更緊密的內容。這些高層次的數據最終會成爲您流傳的內容。

其次是構建可伸縮的服務器,這是一個單獨的野獸。要做到這一點,通常需要在OS /內核的核心部署非常高效的多線程來實現非常高效的異步I/O。在這個問題上有一些很好的資源,但是它涵蓋了一個簡單的答案。

第三種可能是壓縮數據以進一步減少所需帶寬。

一個商業遊戲標題可能會尋找所有這三個,但可能首先要意識到的是,它們不一定要在任何地方流式傳輸獨特的三角形和texels - 流式傳輸這樣的低級數據會給該遊戲帶來巨大的壓力服務器,尤其是考慮到MMO旨在處理的玩家負載。這些遊戲(尤其是MMO)經常使用大量的實例數據來顯着減少實際佔用內存和單獨傳輸的唯一數據。

地圖和資產通常被設計爲認真重用盡可能多的現有數據 - 精心製作成具有降低存儲需求最大重複,但不看太招搖冗餘(對經濟的變化)。它們看起來很「龐大」,但考慮到相同數據的重複量很大,並且考慮到它們不會重複存儲重複數據,所以它們並非真正從數據的角度來看。它們通常非常非常經濟。

就流媒體而言,一種簡單的方法可能是將世界打破成二維區域(有些重疊以允許無縫的體驗,以便相鄰區域隨着玩家在世界各地旅行而流動)與AABB在他們周圍。爲播放器所在地區的數據流式傳輸,並且可能在視域內可見。它可以比這更精細,但這可能是一個體面的起點。