首頁>科技>

大家好,我是金山雲的技術專家——鄭明,前面錄過兩個關於鎏光雲遊戲引擎的介紹影片,由於我主要把時間花在寫程式碼上,只能忍痛割愛,沒給影片加字幕。沒辦法,這個確實比較耗時……這次就更厲害啦,乾脆連影片也沒了,就錄個音。

這次要聊的是鎏光的抓圖技術。之所以談這個,是因為有個老夥伴質問我:你的鎏光支援 120Hz 重新整理率嗎?還有網友說:鎏光和 moonlight 很像,想了解兩者有何差別。

我想了一下,這兩個事兒其實可以一起談。

首先,咱們統一一下概念,這裡提到 120Hz,其實想說的是高重新整理率,相比主流的 60Hz,像 144Hz、300Hz 或更高的就統稱高刷,老夥伴說的 120Hz 是拿 iPad Pro 的重新整理率來舉例。可以肯定的是——鎏光支援高重新整理率,而且它有個優勢,就是不需要服務端接一個高重新整理率的顯示器。這裡說的不需要,就是真的不需要,也不需要任何奇技淫巧、複雜配置,或外接顯示器欺騙頭之類的手段。事實上,看過前期影片的小夥伴應該知道,鎏光是支援服務端在遠端桌面下工作的,可以說伺服器上完全不接任何顯示裝置也沒關係。

原理也很簡單,鎏光的抓圖方案是透過 Hook 手段拿到遊戲產生的畫面,可以簡單地認為鎏光每秒抓圖的數量等於遊戲的 fps。如果伺服器上游戲的 fps 有 120 時,那麼客戶端接到的就也是 120 的 fps,這時候只要客戶端的顯示器支援 120Hz 重新整理率,就能完美呈現出這 120 的 fps。

其實瞭解鎏光的人會覺得問這個問題有點奇怪,我思考一番後,認為之所以有這麼個質疑,很可能是因為這位老夥伴以前玩過 moonlight,因為 moonlight 抓的是整個螢幕,所以它抓圖的速率是有個上限的,就是服務端顯示器的重新整理率,比如伺服器接個 60Hz 的顯示器,那麼不管遊戲的 fps 有多高,它每秒最多隻能抓到 60 幀。此時,客戶端用 120Hz 的顯示器,就沒法發揮作用了。

moonlight 為了支援高重新整理率,需要用點奇技淫巧,經過一陣騷操作和配置之後才可以,而鎏光是天然支援高重新整理率。

接下來聊聊 Hook 抓圖的原理。上規模的遊戲都會使用 3D API 來產生和顯示遊戲畫面,比如 DirectX、OpenGL、Metal、Vulkan,他們都有共同的大致流程,遊戲透過運算在視訊記憶體產生一幀畫面的資料,然後呼叫一個介面把這幀資料提交給顯示卡的前緩衝區,這個介面可能有不同名字,但我們先統一稱為 Present。鎏光就是針對每種 3D API 的 Present 介面進行 Hook,經過每種 3D API 的相應操作,拿到遊戲畫面。這個方案的好處是能儘早地拿到遊戲畫面,其它抓圖手段都會更晚一些。我們知道雲遊戲的一大難點就是要解決延遲!儘早地拿到遊戲畫面肯定是有幫助於降低延遲的。

35
最新評論
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 三友集:隱私、大資料時代、資料奴隸及其它