《天涯明月刀》引擎技術和技術突破【騰訊創新日】

尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️

加入LINE好友

《天涯明月刀》引擎技術和技術突破【騰訊創新日】 遊戲 第1張

引言:6.14日「騰訊創新日:科技年技術盛宴」代表騰訊各個事業群技術實力的四級專家、騰訊微創新2016年度創意獲獎團隊歡聚一堂,一起暢談AI、系統安全、架構設計、社交傳播、推薦模式、遊戲引擎等前沿科技和騰訊應用創新的台前幕後。來自IEG的北極光工作室群的專家工程師安柏霖,就《天涯明月刀》的遊戲引擎開發歷程,給大家分享了引擎開發與技術突破。

《天涯明月刀》是北極光工作室群自研的大型武俠網遊,使用的是自研的遊戲引擎。引擎達到了比同期遊戲引擎更好的表現效果同時,還擁有了更好的更好的效率。

本次分享主要介紹在做遊戲引擎的時候如何系統化的去做技術突破,通過幾個視角來介紹具體的技術研發,包括:通過第一原理思維讓大家了解那些事情我們可以去突破;並和大家共同分享在開發過程中的成本&收益關係;探討工程師如何深度跨界,通過擁有產品視角,來對開發進行質的提升。

《天涯明月刀》引擎技術和技術突破【騰訊創新日】 遊戲 第2張

以下為安柏霖演講實錄:

我是來自IEG的北極光工作室群的安柏霖,今天就《天涯明月刀》的遊戲引擎開發歷程,來講一下引擎開發與技術突破。

《天涯明月刀》引擎技術和技術突破【騰訊創新日】 遊戲 第3張

首先介紹一下我們的遊戲。《天涯明月刀》是由IEG北極光工作室群開發的一款大型多人在線遊戲,是一款PC端遊。一直以來,天刀在業內受到了廣泛的認可,我們在公司麼外的很多獎項上也獲得了很多。比如說在公信力很強的遊戲製作人評選大賽上,我們獲得了最佳遊戲研發技術創新獎。

同時我們也有不錯的成績,2016年獲得了IEG的最佳突破獎。我們後面也將在韓國經營,我們的合作夥伴nexon對於我們的評價是:「即便在韓國這樣遊戲非常發達的市場,天刀也有頂級的遊戲畫面和震撼的遊戲效果「。

《天涯明月刀》引擎技術和技術突破【騰訊創新日】 遊戲 第4張

上面是遊戲中實時運行出來的畫面,而且再一個普通的消費級電腦上就能跑得很好。

我們是使用的自研遊戲引擎,它是由是北極光工作室群和IEG研發部聯合開發的。

遊戲引擎有兩個非常重要的指標:畫面表現和運行效率。天刀在我們的品類和畫面最好的遊戲在同一個水平線上,現在畫面最好的是《黑色沙漠》。效率上我們和效率最好的遊戲在同一個水平線上,也就是說天刀同時擁有最好的遊戲畫面和最好的遊戲效率,讓我們的產品在市場上取得了非常好的競爭力。中間的《劍靈》使用了非常著名的商業引擎,我們的綜合表現是好於商業引擎的。

今天我們來聊什麼?

今天我們更側重於聊真實產品的創新實踐。和公司內部做產品的小夥伴一樣,我們業面臨著在有限的資源下再出盡可能好的產品,給玩家帶來更好的體驗。實際中的創新實踐就像高考數學最後的大題,我們對著答案把這個問題搞懂和在現場解出來有天壤之別,所以解決問題的能力一直是我們長期以來非常關注的一個點。

今天的分享包括:多線程解決方案,和透明布料。同時也會包括是什麼能夠讓這個解決方案能夠構建出來。

多線程解決方案&系統化的方案構建

《天涯明月刀》引擎技術和技術突破【騰訊創新日】 遊戲 第5張

首先看一下多線程。我們多線程用了很多,原因非常直接,我們需要很強的效率,需要利用多核的計算資源。這就是天刀里面的一個場景,非常廣闊,有1500米以上的超遠視距,視野中覆蓋滿了植被和建築。它的性能挑戰非常高,目前市場上也只有我們可以做到這一點。

《天涯明月刀》引擎技術和技術突破【騰訊創新日】 遊戲 第6張

然後我們可以打出千人級別的團戰,準確講我們的性能挑戰是在超大規模的場景上打出超大規模的團戰。

除了性能挑戰,還有另外一個維度的挑戰–複雜度,這個維度上的標桿場景就是魔獸世界。《天涯明月刀》的複雜度不輸魔獸世界。我們盤點了一下,載整個行業中,包括國外的商業大作中,我們都是面臨著最高級別的挑戰。所以在多線程模塊中我們要處理好這兩個挑戰:性能&複雜度。

《天涯明月刀》引擎技術和技術突破【騰訊創新日】 遊戲 第7張

性能方面,我們的原則是盡可能讓定型能夠覆蓋更多的模塊。在引擎中,我們高達70%的引擎模塊是以並行的方式去執行的。我們整個系統構建得比較好,所以讓更多的模塊來執行。這里補充一點就是,多線程高速運行是必要但不充分的條件,達到現在的效率還需要大量的優秀技術做到才能做到。

之前和一個老同事介紹過這件事,他意味深長的問我:」你們多線程用得這麼多,Debug的過程心里一定很苦吧?「。這確實也是業內的一個共識,就是多線程是雙刃劍:用了多線程,性能會更好,但是同時會成為BUG重災區,難以處理,經常需要到項目里面最精銳的部分來處理這個問題。

在天刀中,我們可以把多線程做到非常易用,全團隊都可以做多線程的編程,甚至剛畢業的小同學經過培訓也可以做。而bug方面就是:幾乎沒有BUG。經過我們的統計,我們在多線程方面的bug總體不超過10個,debug的時間不超過一周。所以用到70%以上的覆蓋率,易用且不太有BUG,在行業里非常領先。所以我們把多線程的雙刃劍變成了大殺器。

《天涯明月刀》引擎技術和技術突破【騰訊創新日】 遊戲 第8張

複雜度處理方面我們主要是兩個方面:一個是簡化選擇,一個是簡化使用。

簡化選擇

多線程中有很多種模式,我們依照全面且最少的原則做到提供了3中模式,我們同事想做異步計算的時候,總有一款適合你,同時又不會太多,這樣就把出問題的可能性降到最低。

簡化使用

在使用的過程中,我們會刻意的把多線程模式在使用中以大家熟悉的概念進行包裝,然後把接口最簡化。

我們舉其中一種:「常駐」模式,我們會把它包裝成狀態機,它在遊戲開發里面是最基本的東西,接口使用上特別像單線程。這樣使用起來,出錯還是很難的。多線程中還有很多特別複雜的部分,我們做了強封裝的處理,我們要把非常困難的東西集中在非常少數的人,由兩個最棒的工程師搞定。搞定的過程中,我們借鑒了操作系統中顯卡驅動的資源管理,整體方式包括生命周期、同步管理、調度等等,我們從這里得到了很多啟發來做到。

系統化的方案構建

我們可以看到,多線程覆蓋非常充分,使用起來非常簡單,把它集中在少量的地方,由工程師乾淨利索的搞定。這套系統非常大非常複雜,邊做邊迭代的方式,想做好就比較難,需要有一個非常全面的設計。

整個構建的過程我們稱之為系統化的方案構建。

《天涯明月刀》引擎技術和技術突破【騰訊創新日】 遊戲 第9張

可以看一下這個過程,第一是把問題進行拆解。以樹狀邏輯的方式一級級展開,到達子節點的時候,要做到相互獨立,完全窮盡,樹狀非常有邏輯性。

然後開始根據這些問題,在我們的知識體系中一級一級的尋找答案,例如異步模式,在多線程領域中就會有相應的知識點。

進入到易於使用,發現它的知識點已經不在多線程領域了。我們開始找到狀態機、顯卡驅動系統,甚至包括做項目時的一些知識,包括有戲有什麼特點,項目構成、項目資源等等。

這里可以看到我們是用一棵這樣的知識體系去尋找答案。像直接的知識可以google,做多線程Google相關的知識,這沒有問題。但是我們不太會在做多線程時候去搜顯卡驅動是怎麼做到的,所以這個種遊戲開發或者說計算機知識領域方面的知識需要長期學習,而技術之外的知識需要長期實踐。

《天涯明月刀》引擎技術和技術突破【騰訊創新日】 遊戲 第10張

看了這個解決方案,可能有的同學會問系統化到哪里呢?我們可以看下如果過程不那麼系統化會怎麼樣,我們發現它是一個零散的需求點,知識結構也沒有建立得特別好,是一些很零散的知識點,在解決的時候呈現點對點的軸,迭代高起,這個時候會發現整個過程是比較緩慢的。

《天涯明月刀》引擎技術和技術突破【騰訊創新日】 遊戲 第11張

系統化的過程就是我們是以「需求樹「對「知識網」的方式來構建整體的解決方案,最後達到快速完備的構建解決方案。這對於我們在「考場」上「做題」是至關重要的。細心的同學也會發現,這個知識網太重要了,接下來我們看一下知識體系的構建。

《天涯明月刀》引擎技術和技術突破【騰訊創新日】 遊戲 第12張

知識體系構建

是否有空多學點?還真不是。我們這里需要注重解決兩類問題:「不知道「和「知道,沒想到「。」不知道」要刻意追求充分覆蓋,避免盲點。」知道,沒想到」,就要刻意體系化。

《天涯明月刀》引擎技術和技術突破【騰訊創新日】 遊戲 第13張

知識覆蓋我們要追求充分覆蓋,主要挑戰是是量很大,我們在整個遊戲開發領域中做到各方面都比較深入對於個人是很難的,怎麼辦?我們引入團隊學習的方式。

我們以全體團隊成員去覆蓋整個知識體系。我們首先對知識結構進行review,刻意去避免盲點,遇到我們沒有覆蓋到的地方就分配相關的個人進行學習。然後以團隊學習&分享的方式進行集體學習,並且對學習內容進行規劃。所以知識的充分覆蓋靠個人的力量不行,而是團隊,刻意以知識結構review,避免盲點,這樣很容易達到個人學習6倍以上的學習效率。

《天涯明月刀》引擎技術和技術突破【騰訊創新日】 遊戲 第14張

這里知識結構覆蓋比較充分的時候,可以這個為目標:能夠回答這樣的問題,「行業中,多線程方案都有哪些,各自核心思想,優缺點是什麼?「由此可以擴展到光照系統等等方面。

《天涯明月刀》引擎技術和技術突破【騰訊創新日】 遊戲 第15張

知識的體系化,解決的就是知識能夠被良好的組織,認識透徹,當我們需要使用的時候,可以立刻從大腦中提取出來。我們的方法很多,其中之一可以圍繞這個問題的解決方案或者核心思想構架知識體系。比如談到負載均衡的話題,它的空間、時間、計算資源、存儲資源優什麼,再向外擴一級,在分布式計算、多線程、大規模戰鬥、開發流水線、實時渲染等等。當我們這樣構建出一個體系,只要碰到負載均衡方面的問題,就一定不會錯過。這樣我們就可以跨領域&全面的構建方案。這個過程不是一個靈感浮現的過程,就是一個充分覆蓋,體系化的過程。

第一部分的小結是,多線程性能並行很重,有非常好的控制。系統化的解決方案有清晰的分析樹對上完備系統化的知識網,最後能夠比較完備的把多線程大系統構建得很好。

透明布料&跨領域

《天涯明月刀》引擎技術和技術突破【騰訊創新日】 遊戲 第16張

透明布料部分,我們要解決的就是在要衣服這種非常複雜的透明材質,保證渲染高質量,同時高效率。

這個目前《天涯明月刀》的質量&效率是業界比較領先的。

最後達到在超大規模地圖上,玩家可以穿著透明的衣服,進行超大規模的戰鬥。

《天涯明月刀》引擎技術和技術突破【騰訊創新日】 遊戲 第17張

這里我們依舊是以系統化的方式去構建解決方案,所不同的是這次的主要突破點都在「純技術」之外。

圖中所示,三個點有一個做不到,我們的技術突破就不會發生。

首先我們要清楚,學術上高效&正確是不可能的,這個可以推理出來,我們不做「死磕」,否則就會走到死胡同中去。

然後我們在開發的過程中,我們的知識體系中是有在「純技術」方面不行的時候,從產品和開發流程角度去突破的方式,可以說這個是從實踐中來的,在學術覆蓋不到的時候的突破角度。

最後我們在嘗試的過程中,其實失敗了兩次,一個月的開發只換到「這兩個方向不行」的結果,但是我們會繼續嘗試,這個到不是因為我們對於這件事情特別執著,而是因為我們對於這件事情的價值判定是準確的,它值得我們嘗試2個月。

注意這里我們遇到困難,永遠不放棄的做法在實際項目中是非常危險的,在《天涯明月刀》研發過程中,這樣的創新我們有幾十個,失敗的概率大約一半,正確的做法是評估這件事情的價值,依據價值判定投入的時間。相當於在考場上,15分的題就是要做20分鐘,不能提前放棄,也不能到時間了還死磕。

《天涯明月刀》引擎技術和技術突破【騰訊創新日】 遊戲 第18張

所以我們如果把跨界知識,也看做知識體系的擴展的話,整個過程體系性就比較強,在我們核心體系構建比較好的情況下,逐漸擴大我們的知識面,會讓開發能力大大提升。

小結

最後我們小結下本次分享的核心內容,我們聊到了:

  1. 《天涯明月刀》兩個在技術方面做的比較好的地方,多線程解決方案和透明布料

  2. 聊了這兩個「解」,同時也聊了如何構建這個「解」

  3. 最後我們看到項目中構建創新的關鍵是:

  4. 系統化構建解決方案:高效&完備

  5. 知識體系構建:充分&體系化=>跨界

《天涯明月刀》引擎技術和技術突破【騰訊創新日】 遊戲 第19張

About 尋夢園
尋夢園是台灣最大的聊天室及交友社群網站。 致力於發展能夠讓會員們彼此互動、盡情分享自我的平台。 擁有數百間不同的聊天室 ,讓您隨時隨地都能找到志同道合的好友!