無損體驗的微端是怎樣煉成的
12年開發的微端,轉眼間已是手游的時代。微端可以說是較少技術驅動和導向的產品,雖然看似簡單的邊下邊玩功能,實際變成產品也蘊涵了無數的細節和打磨。代碼和技術是容易過時的,但產品化的思想,對用戶和需求的理解,對細節的極致打磨這些是能被積累和繼承下來的。
一、什麼是軒轅傳奇微端
軒轅傳奇是由北極光工作室開發的騰訊首款3D淺規則戰鬥網遊。軒轅傳奇微端在保持軒轅傳奇完整端畫質、性能和體驗的前提下,將安裝包從2G減少到300M,極大程度地提升了用戶體驗。
二、第一版:30M微端
隨著市場上微端技術的流行,軒轅傳奇項目也希望採用微端技術來減少客戶端容量,縮短補丁更新的等待,降低用戶的進入難度。
我們分析了市場上其他的微端遊戲,準備在軒轅傳奇完整版的基礎上進行微端化,並初步制定了如下需求:
- 達到其他微端遊戲的效果;
- 最大程度減少客戶端容量;
- 最小限度修改當前完整版,保證兩個版本的同步性和穩定性;
- 在不影響現有完整端開發的情況下,三個月內實現上述目標。
針對需求我們完成了如下工作:
- 對於遊戲中前台載入的必要資源,例如地形數據和邏輯配置數據,在場景Loading時通過IIPS的HTTP即時下載,下載完後自動載入進入;
- 對於遊戲中後台載入資源,例如場景物件、角色、NPC、怪物、技能等,統一修改後台載入底層,接收到後台載入任務請求時,首先判斷資源是否存在,如果不存在則將該任務投遞到下載隊列,通過IIPS的HTTP即時下載,等資源下載完再投入後台載入隊列,這樣就將所有後台載入的資源無縫實現了微端化。
- 對於占最大容量的貼圖資源,開發了工具將貼圖資源自動導出低精度貼圖,修改了貼圖載入的底層介面,載入時首先判斷原始貼圖是否存在,如果不存在自動使用低精度貼圖。高精貼圖不主動請求下載,使用IIPS的P2P無序下載;
- 音效視屏等數據依賴IIPS的P2P無序下載。
兩個月後,我們實現了第一版30M的微端,效果和目前市場上的微端遊戲相似:剛進入遊戲時部分場景、NPC、角色等都不顯示,貼圖模糊,沒有聲音。隨著不斷的下載,主角周圍的場景開始逐漸顯示,貼圖逐漸變清晰。
三、惡評如潮,僅僅小就夠了嗎?
實現了目前主流微端產品的效果,安裝包也精簡到了30M,我們懷著激動的心情將成果展示給組內同事。令人意外的是,體驗後的同事比我們更激動!惡評如潮,卡頓、體驗不暢的反饋不絕於耳,美術同學普遍反映無法接受殘缺的遊戲畫面,更有人激動的表示「這還是遊戲么!」。我們的心情也在瞬間崩潰,這怎麼就不是遊戲了?現在的微端遊戲不就是這個樣子么?
第一次失敗之後,我們進行了反思。確實目前市場上微端產品包括征途微端,魔獸世界微端等都存在類似問題,也引起了玩家的反感和惡評。我們總結了用戶反饋後,主要有以下問題:
1. 遊戲第一眼非常重要,新手玩家不能有任何殘缺體驗,貼圖模糊,場景鏤空,滿地陰影片,聲音缺失等都是不能接受的;
2. 即使是老玩家,也沒有耐心在無法遊戲的情況下等待超過1分鐘;
3. 網速很慢的同事反映遊戲無法正常體驗;
4. 快速移動以及玩家密集的情況下會卡頓。
我們根據反饋重新制訂了需求:
1. 對新進玩家來說微端也必須是無損體驗;
2. 不能有新增的阻塞式等待過程;
3. 2.300M是用戶下載的心理瓶頸,微端安裝包必須在300M以內;
4. 目前用戶最低帶寬是512k,下載速度60k/s,必須保證玩家在30k/s下流暢體驗;
5. 性能上也必須保持和完整端一樣,不能有影響體驗的卡頓現象,支持400人同屏。
四、既要馬兒跑得快,又要馬兒不吃草?
既要無損體驗又要容量減少還要支持30k/s下載速度並且保證不卡,這強人所難了吧,能實現么?
可以看出最核心的難點是「無損體驗」四個字,如何既減少容量又保證體驗,解決不了這個問題微端就不能成為一個合格的產品!經過仔細分析後,我們發現這些看似矛盾的需求,是可以實現的。
首先我們要求的完全無損體驗是針對新手玩家,那麼前20級新手資源就是必須的,後續資源可以邊下邊玩。
一般情況下,資源的下載速度是超過玩家體驗速度的,我們如果能預先分析出玩家的體驗流程和常用資源,那麼我們不就可以保證所需資源總在體驗到之前就下載好呢?
對於當前已經在下載的資源,我們還可以區分資源的重要性,優先下載玩家最需要的資源。
對於用戶反饋的資源下載導致的體驗問題,我們也可以依據用戶的網路情況做出實時調整。
雖然安裝包變大了,但是結合MiniDown自動下載安裝工具,用戶還是只需要下載4M下載器就可以自動完成微端的下載和安裝,相對於30M的微端安裝包雖然下載時間稍長,但安裝完成後可以立即遊戲無需等待,實際上用戶的絕對等待時間反而減少了,大幅提升了遊戲體驗。
五、細節決定成敗,鋼鐵是怎樣煉成的
找到了解決最核心問題的方法,我們進行了如下方面的開發:
1. 智能下載
a) 自動化資源細分
首先我們與策劃合作對遊戲資源進行了細分,將資源區分為安裝包必要資源、新手體驗資源、場景必要資源、LOD資源、不同職業等級資源、活動資源、邏輯配置資源等,並開發了多種工具利用規則動態細分資源,而不是無法維護的手工細分資源。
線性的新手體驗資源進一步細分成前10分鐘,前15分鐘和前20分鐘的體驗資源,前10分鐘體驗資源是必須放入安裝包中的,前15分鐘和前20分鐘的只放入必要資源,在30k/s的下載速度下保證下載快於玩家需求。
非線性的資源我們通過玩家的職業、等級、所接任務、每日活動等信息,預估玩家可能需要的資源,例如戰士任務會進入戰士神殿,賽馬活動開始後玩家很可能會進賽馬副本等等,預先下載相關資源。
b) 制訂下載規則
通過大量分析和測試我們制訂出了非常複雜的下載優先順序規則,並且在遊戲進程中可以動態調節,始終保證HTTP即時載入且僅載入當前有用的資源。例如優先下載主角周圍的資源和高精貼圖,場景資源投遞後進先出,優先下載主角的隊友、當前任務的NPC和怪物、主角當前選中的NPC和怪物等。
c) 避免場景鏤空
我們選擇了將場景中的模型頂點數據和基礎低精度紋理作為必要資源,在玩家進入後根據玩家的位置視角下載並動態替換完整資源(例如非常大高精貼圖,高光貼圖,AO陰影貼圖,光照貼圖等),類似LOD的做法,這樣一個幾十M的場景僅需要幾百k就可以保證在視覺上玩家幾乎無法區別,完全避免了場景鏤空問題。
d) 體驗優化
對於無法預估的資源,如玩家隨機進入一個場景,我們也進行了大量體驗優化。例如玩家選擇進入一個未下載的場景,我們會彈出tips提示玩家該場景正在下載,此時玩家可以先去玩別的,並可以隨時看到下載進度。下載完畢後自動提醒玩家,並提供到該場景的自動尋路。
對於組隊副本,客戶端會告訴伺服器哪些地圖資源未準備好,伺服器據此判斷玩家是否可以進入副本。隊長選擇副本後,未下載完畢的隊員會立即以最高優先順序下載,任何一個隊員資源未準備好,整個隊伍將無法進入副本,隊長可以查看隊員的下載進度,決定是否等待或者踢掉部分隊員。
2. 智能限速
為了防止低帶寬的用戶在下載資源時影響遊戲協議收發導致卡頓,我們實現了一套智能限速系統。我們設定玩家下載速度上限1M/s,下限30k/s,遊戲運行時我們監控遊戲的網路延遲,當一段時間內網路延遲較高時,我們動態快速降低下載速度並減少並行的下載線程,當一段時間內網路延遲較低時,我們動態慢速提升下載速度並增加並行的下載線程;當遊戲進入鎖屏和未激活狀態時將提升到最高的下載速度和最多的下載線程。
3. 殘缺體驗優化
儘管有了智能下載的保證,但是對於高等級玩家以及一些不可預知的操作,還是不可避免會遇到所需資源不存在的情況。因此我們進行了大量殘缺體驗優化。例如在資源未下載時UI和NPC模型顯示齒輪載入效果,人物換裝使用默認替代服裝,貼圖資源不存在時使用低精度貼圖和LOD效果,當資源下載好後後台實時無縫替換,讓玩家幾乎感覺不到。
如果老玩家重新安裝微端後,出生在一個未下載的場景,我們會下載該場景並自動將該玩家傳送到已經下載好的場景,保證玩家可以立即進行遊戲。
4. 性能優化
通過使用VTurns,Amplufie等工具,找出了微端的性能熱點並進行了優化。我們直接使用了IIPS的底層介面減少了冗餘的鎖和冗餘調用的開銷,並在IIPS底層介面上針對軒轅傳奇重新開發了文件Cache,減少Cache的內存容量,大幅提升了資源載入速度。此外針對性能熱點修改了邏輯和底層,解決了卡頓問題和內存膨脹的問題。我們還和IIPS組件同事重新制定和修改了IFS文件格式,大幅優化了微端性能。
5. 自動化版本製作流程
因為我們對資源做出了大量的處理和分類,導致製作微端版本需要大量工作,例如低精度貼圖的自動生成,NifKfm等數據的自動管理,每個場景資源的區分配置,安裝包資源的區分配置,微端數據包的打包,補丁包和配置文件的生成等。如此多的工作又不能出任何錯誤還要保證版本敏捷,人工製作是不可能的。我們開發了自動化的版本製作流程,只需輕輕一點,即可在30分鐘內完成微端版本的製作和發布。
六、創新的無損體驗,用戶說好才是真的好
再次在組內展示微端後,獲得了大家的一致好評,即使限速30K,也有非常好的遊戲體驗。整個體驗過程中沒有鏤空畫面,沒有卡頓,前20級基本不會遇到不完整的資源,不會阻塞用戶體驗。
今年5月份微端版本上線後,經過海量玩家的大規模使用,無損體驗的微端也獲得了廣大玩家的認可。絕大多數玩家在1小時之內就完成了所有數據的下載,而下載達到1M的玩家半個小時內就可以完成下載,整個遊戲中基本遇不到下載Loading界面。在用戶調查時,用戶紛紛表示沒有感覺到微端和完整端有任何區別。
一個好的產品是由無數細節打造的,微端化無損體驗創新性的給微端遊戲帶來了完整版的體驗,做到了魚與熊掌兼得,在體驗方面達到了市場上同類產品難以企及的高度。微端化的成功,也為後續Web化以及和其他平台的集成打下了堅實的基礎。
推薦閱讀: