騰訊GDC演講:遊戲研發提速40倍!如何程式化重建秦朝大都市?

「 點選上方"GameLook"↑↑↑,訂閱微信 」
隨著開放世界和SOC遊戲在業內熱度提升,創造龐大且逼真的遊戲世界、尤其是有居民和各種功能的城市,成為了許多團隊需要面臨的挑戰。然而,與現代化城市都建立在平地上不同,中國古代城市往往依山傍水而建,且建築風格和佈局也大不相同。
因此,打造中國古代大都市幾乎沒有可用的現成解決方案,而“手搓”一個龐大的城市幾乎是不可能完成的任務,哪怕是對於3A大廠而言。
GDC 2025大會上,騰訊程式化解決方案部門的Yuqing Chen和Guo Yu做了題為“程式化方式:重建秦朝大都市”的演講,詳細介紹了他們過去一年用程式化解決方案打造秦朝咸陽城專案的經歷和經驗。
據Yuqing Chen在演講時表示,該專案如果要手工製作,大概需要336人-月,但在騰訊遊戲自研管線、框架和工具集的加持下,直接將研發時間縮短到了9人-月,提速超過37倍。
以下是Gamelook聽譯的完整演講內容:
Yuqing Chen:
我的名字叫Yuqing Chen,很高興今天能和我的同事Guo Yu一起分享我們去年的作品。這個專案的目標是透過程式化流程創造一座大都市。
介紹一些與我有關的資訊,我是2020年加入騰訊的,負責創作程式化相關的解決方案、工具集或內容。在開始之前,我們先展示一些片段:
影片展示了使用程式化工具建造一個大型中國古代城市的關鍵階段,從道路劃分和地塊分割到庭院生成與建築人口,不管是普通的鄰居宅院還是貴族庭院與秦朝皇宮,所有都是使用(虛幻引擎)PCG工具模組化生成的。
透過結合不同POI(興趣點)區域的設計要求,運用了微調以確保每個區域都有其獨特的特徵。
整個設計包含以下工具:
建築工具:透過特定語法和多樣化模組生成複雜的建築。
城牆工具:用spines快速創作院牆、城牆、樓閣牆體。
繩索工具:在兩邊創作懸架曲線以生成繩索和裝飾物。
行人工具:手動創作路線和散射以生成帶有不同行為的NPC。
河流工具:使用splines生成河流,併為各種河岸地形和生物群落應用模版。
接下來,是這些工具在咸陽城生成中的運用:
用農田和生物群落生成工具,短時間內就可以佈置大規模的田地,穿過咸陽的渭河是透過河流工具實現的。
城市佈局工具生成了平民區,遵循秦代的建築規則,也就是“閭里”。
咸陽的三個主要市場(西市、東市)使用建築工具創作的,結合了行人、繩索和織物生成工具,手動調整強調了每個市場的不同。
從本地市場到豪華區域,每一個區域都是與眾不同的,基於古代庭院結構,如三邊和L型庭院,建築工具多樣化地生成了富人區。
建築工具使用“庭在前居住區在後”和“中軸線對稱”等原則建造了露天平臺和宮殿。
我們今天要分享的有4個部分,第一個是介紹部分,主要是專案背景、我們之前做過什麼,以及為什麼我們想要打造這樣一個Demo。第二部分是我們工具集的架構,我們透過這個專案想要實現的一些目標,還有我們做的一些設計選擇。第三部分是部署細節,比如佈局、建築、POI區域以及一個簡短的總結。
這是宣傳片的剪輯,你們可能有人已經看過了,我想展示的是之前做過的作品中的自然環境。
可以看到,我們過去幾年在打造一個開放世界型別的手遊,目標是有64平方公里的可玩區域,其中60%是自然區域,40%將是居民區,如小鎮或大都市。
這是我們之前做過的一箇中型城市,它包含大概2000個建築,我們用了手動方式製作這個城市,我們用了21%的月數完成製作,然後又用了2%的月數進行迭代。
現在我們要打造的是大概之前16倍規模的城市,所以,如果我們用之前手動方式去做,這次預計要336人-月,基本而言是不可能實現的。
那麼,我們該如何完成這個目標?帶著這些問題,我們在尋求一些行業解決方案來幫助我們。育碧之前做過很多次PCG相關的演講,所以其實有很多解決方案,其中Houdini方案對於自然環境非常好用。
我們學習了這些,並打造自己的管線創造不同的自然環境。可以看到這些圖片,它們是我們正在打造的遊戲世界中的不同位置。
但是居民區對我們來說仍然是個問題,因此我們檢查了一些程式化城市生成解決方案,如《蜘蛛俠》系列和《駭客帝國覺醒》的技術demo。它們非常令人印象深刻,如果還沒看過,我建議你去看一下。
但問題在於,我們要打造的是一箇中國古代城市,具體說是秦朝城市。
以上是我們要打造城市的一些參考圖片,可以看到,它們的佈局不規則,這與現代城市建在平地區域不同。中國的古代城市,尤其是秦朝的城市,通常是繞著山脈建造的,因此它們在垂直方向有多重結構。
經過這些思考之後,我們發現打造這種城市沒有一個特別好的解決方案,我們必須自己打造一個方案,這也是我們創造古代城市的原因。
我們透過這個專案希望實現的目標有幾個:首先,我們想打造一個面向美術師的工作流程,我們的美術師會遵循一些被稱之為質量等級的階段,以打造高品質場景,所以當我們打造自己的PCG工作流時,需要匹配這個工作流程,而且每個階段都有各自的要求。
第二個目標是遵循城市的佈局設計。左側的圖片可以看到,我們已經有一些來自美術師和概念美術師的設計,我們必須向他們提供一些工具和功能,以便快速進行關卡設計創意原型。
與此同時,我們程式化生成的內容也需要遵循這種佈局設計,就像中間和右邊圖片中展示的那樣。我們在價值或PCG生成的位置方面有一些限制,比如一座建築和一面牆之間不能有太窄的通道,或者太短的間隙,以免那裡會發生戰鬥。所以,我們還需要匹配玩法設計。
第三個目標,是提升製作的效率,因為我們之前有過手動製作的悲慘經歷,所以我們希望對製作流程加速。
來看看我們為此給出的答案,我們的工具集基本上分為三個不同步驟:第一步是手動擺放,這個步驟中,我們讓美術師擺放不同的方塊和曲線以代表不同的區域和道路,這樣他們可以快速對關卡設計進行創意。
第二個部分,我們稱之為互動PCG流程,這個過程中,我們會在每個區域內生成各種子箱體,這些子箱體代表的是建築和其他PCG目標。美術師可以與這些箱體互動來調整它們的大小或位置,然後反覆除錯PCG結果。
第三步叫做PCG+手動步驟,這個步驟更多是高品質資產以及裝飾內容的生成,這個步驟應該達到遊戲交付的品質。
面向美術師的工作流另一部分是,我們用兩個定製編輯器模式拓展了虛幻引擎,第一個是古代城市編輯模式,第二個是為POI區域設計的,也就是POI編輯模式。虛幻引擎和Houdini這兩個應用之間還有一個數據轉換工作流,透過我們的定製化PCG服務實現。
所以,透過這種方式,我們可以讓美術師直接在虛幻引擎內創作內容,在這個流程中不必開啟其他應用。可以從圖片中看到,左邊美術師畫了不同的顏色,它們實際上是區域和道路,我們會將這些代理資料傳送到Houdini,也就是右邊部分。當資料處理完成之後,我們將資料取回引擎中獲得場景。
我們的第二個目標是滿足中國古代城市佈局要求,所以我們回顧了中國古代的建築風格,發現每個朝代都有各自的風格。就像我們之前提到過的秦朝“閭里”制,宋代的“街巷”制。我們還回顧了不同區域的佈局,比如生活庭院、花園、宮殿或者中國傳統廟宇。所以,在我們的工具研發中,我們會尊重這種獨特性。
我們的第三個目標是提升製作效率,所以,我們希望美術師聚焦於POI區域,在這些區域中,可能會有大量的玩法設計。由於我們80%的內容將是程式化生成,另外20%將會是POI區域,即圖片中的紫色部分,我們還專門為這個部分設計了特別的工具。
提升製作效率的另一個部分,我們想要快速在佈局之間調整。所以我們為手動多區域一次調整研發了分配調整法,比如左側圖片中,多個區域可以同時調整,我們的美術師可以獲得高頻率反饋。
對於單個區域,引數控制可以生成多元結果,所以我們的美術師可以按照自己的意願選擇更好的一個。
另外,我們的PCG結果可以在生成之後手動修改,美術師可以調整區域效果,以便決定單個區域的最終外觀。
工具集框架方面,可以分為兩個部分,左側的虛幻引擎介面,和右側的PCG後端。虛幻引擎介面負責處理美術師輸入資料,比如一個擺放的方塊、或者描繪的區域,PCG後端負責處理程式化相關的計算。調整完成後,資料會透過我們的PCG服務傳送回虛幻引擎介面。
我們的引擎介面的一個重要任務是處理輸入資料,讓我們的美術師畫出區域和道路,為關卡設計做創意原型。道路會將區域劃分為子區域,如圖片中的紅色和黃色箱體,它們都是子區域。這些子區域,將成為後續流程的基礎。
我們的PCG後端會從引擎接收這些由美術師創作的區域資料,並以遞迴方式生成佈局,如圖所示,很多佈局都是根據我們之前提到的“閭里”規則生成的,以匹配秦朝的建築風格。
在這一步當中,細節內容,如建築、道路、NPC或者一些裝飾內容也會被生成。
對於POI區域,我們設計了一個專門的工具集。我們的美術師可以用這些POI工具集快速創作多種元素,如繩索、標誌、各種各樣的物品或者城外的水田,這裡我們在兩個建築之間創作了懸架曲線。
下一步法的PCG後端和USD部分,我會交給同事Guo Yu做更多的解釋。
Guo Yu:
我是Guo Yu,自從2020年開始就在騰訊工作,我寫了很多程式碼、也畫了很多圖形。很榮幸能在這裡介紹我們的PCG框架,我們將其稱之為Flow,這個框架是前面Yuqing所說的一切的基礎。例如城市佈局的生成、建築的安排都是由Flow支援的。
一些獨特的功能讓Flow脫穎而出,首先,它使用了USD作為標準,這不僅可以與其他數字內容創作工具無縫整合,還給了我們無與倫比的表達力。其次,它是建立在Omniverse上的雲服務,這可以讓我們更容易與團隊成員合作,還能讓我們能夠擴大所需要的計算資源。
第三,它在佈局演算法方面擁抱Houdini。Houdini依然是程式化內容生成最強大的工具,而且它與我們的雲端框架無縫協同。最後,它利用了分散式平行計算,可以讓我們快速、高效地生成大規模內容。希望這些可以回答為什麼我們不使用另一種PCG框架的問題。
那麼,Flow看起來是怎樣的?
表面上看,它帶有藍圖一樣的路徑圖形介面,可以讓流程一步步工作,我相信這看起來非常直接,而且大部分人都很熟悉。
表面之下,整體上它透過3個步驟執行。首先,它從虛幻引擎收集資料,將資料轉化為USD格式,並將檔案上傳到一個伺服器。然後,在伺服器上,我們處理輸入的USD檔案,運用引數和演算法並生成一個USD輸出檔案。最後,我們取走USD輸出,將其轉回虛幻引擎。
這可能聽起來極其簡單,但其實它非常強大。因為,當你需要從虛幻引擎呼叫一些外部工具的時候,始終需要以一種或者另一種方式來回轉換資料。我們認為USD對此是個理想選擇,為什麼?不妨看看它自己的介紹:
USD是一個為合作創造3D場景設計的高效能可拓展的軟體平臺,USD可以允許數字內容創作工具之間豐富的交換,這難道不是很方便嗎?此外,它已經被無數的電影作品測試和驗證過。
USD的能力已經在業內被廣泛運用,此外,我們選擇USD還因為它的高效能和高拓展性。
效能方面,USD是為快速和效率設計的,能夠輕鬆處理大量資料,因此來回轉換的效率較高。USD具有儲存修改內容到單獨檔案的能力,就像是打了一個補丁,這進一步減少了更多的溝通成本,與PCG框架結合起來很完美。
眾所周知,USD誕生於電影行業的皮克斯,很多功能都是圍繞他們的需求研發的。另一方面,我們是遊戲開發者,還有些方面是USD沒有覆蓋的,例如在虛幻引擎中,我們有場景、樹葉、藍圖等等。
幸運的是,USD是極其靈活的,我們可以跳過儘可能多的屬性,可以定製自己的規劃,可以表達資產元件、actor和它們資產之間的複雜關係,這對於建立一個虛幻引擎場景是至關重要的。
這是我們所做的,我們增加了樹葉支援,以便能夠支援樹葉的性質和型別;增加了場景支援以便我們能從獲得場景高度層、邊緣層、權重圖、水分配係數等等。
對於靜態網格,我們可以獲得各種LOD變體,可以用USD能力對碰撞形狀進行具體化,如球體和方塊。我們還可以控制資產的儲存位置讓藍圖使用,還有所有的meta資料等等。
所以,有了這些功能,我們可以用USD呈現一個完整的虛幻引擎場景,以這種方式,透過USD我們可以在Houdini內完全控制虛幻引擎場景。
這是我們使用USD的一個案例,我們在一個USD屬性裡放了大量的文字資料,它可以最大達到數十MB,我確信這不是USD設計的初衷。但透過這種方式,我們可以確保結果在虛幻引擎中是可以再編輯的,以便適應我們的需求,USD可以毫無問題地處理這種事情。
接下來,我們說說把Houdini放在雲端的好處。實際上,這是我們打造Flow框架的最初動機。
首先是可達性,在雲端執行Houdini可以避免使用者在本地機器上安裝它,所以美術師和策劃這樣的使用者可以低成本使用。其次,中心化HDA,現在所有人都可以使用最新版本的HDA,不再有版本不匹配、不再有依賴性錯誤,非常好。對於效能和增量更新,我們之前已經提到過。
最後是HDA保護,出於某種意義,你想要讓使用者使用HDA但又不接觸原始碼,或許收費是最安全的方式。
最後,Distributed Cooking。
這是我們為HMCT專案做的一些東西,很大提升了效能。有了我們現在的工具,它變得容易多了。由於Houdini已經在雲端執行,USD檔案也已經儲存在雲端,只剩下分散任務和收集結果的問題。
在這個圖片中,一名使用者提交一個任務,同時就會有人工對其進行工作,但由於我抹掉了使用者名稱,所以圖片可能看起來有點糊。不論如何,以這種方式,一個大型城市可以幾分鐘內生成。接下來交給同事Yuqing。
古代城市的佈局
Yuqing Chen:
這部分,我們會談到中國古代城市的佈局。基本來說,我們的佈局可以分為兩種型別,第一種是定居點式建築,如平民區或富人區;我們還有大規模建築,如官府或皇宮。
我還想進一步介紹一下我們之前提到過的“閭里”制,由於秦朝是中國歷史上一個比較早的朝代,已經過去2200多年了。它在當時是一個非常軍事化的國家,所以政府以極其嚴格的律法管理人民,居住區也反映了這一點。
可以看到,左側圖片就是“閭里”制的概念藝術版本,(《尚書》)周禮中有這麼一句話:五戶一鄰,五鄰一里。所以這就是閭里制的基礎,以便於政府管理。
從佈局上看,閭里制很像西洋跳跳棋,可以看到右上方和左下方的圖片,看起來像是分散的箱體。所以,為了便於我們的工具研發,我們為最初的閭里佈局增加了一些變體,以打破這種高度重複的節奏。
例如我們的平民區,我們的TA會在Houdini當中打造演算法和HDAs,以遞迴方式生成這些佈局。例如我們有一個輸入方塊,是由我們的美術師在引擎中創作的,我們將其分為不同的閭里單位,每個閭里單位又會再次分為子庭院,如第一步到第三步展示的那樣。
建築和牆體會生成到每個庭院,更多裝飾內容也會被生成,像第五步中的生物群落區域、裝飾物或者NPC。
這裡我們可以檢查一下結果,這是引擎中的最終效果。我們還增加了第三人稱視角。
富人區的研發也遵循同樣的規則,但有了更多的空閒空間或者更大的建築以及更整潔的佈局。
這裡也有一個引擎效果的展示:
對於官府建築的佈局,它始終佔據更大的區域,且建築方面有更大的反差。
從這些圖片,可以看到總有一個更大的建築在中心位置,周圍有更多子建築。
至於我們為此研發的工具,我們的工具始終會將這個區域切分成至少一個主庭院,然後其中有一個較大的主建築,如第三和第四步,我們還從演算法方面保障這裡始終有足夠的空間擺放主建築。
這裡可以看到結果:
為了讓官府區域佈局有更大的多樣性,我們專門為此研發了一個編輯方法,我們稱其為共線編輯(Collinear editing)模式。
由於我們的佈局是在Houdini中生成的,所以在完成之前,我們的美術師看不到結果。這個方法將為Houdini的第一批Cooking資料生成控制器,我們的美術師可以基於視覺效果進行修改,而不是輸入引數不斷嘗試。可以看到,我們可以透過拖拽佈局邊界的方式直接調整官府佈局。
基本來說,這種編輯模式的靈感來源於室內設計DCC,他們經常使用這個,這是一個幾何體演算法的運營方式,當美術師修改了一個佈局,就會立即被檢測到,這可以幫他們快速調整現有佈局。
我們使用這個方法創作皇宮,這裡可以看到結果:
第一步是從Houdini裡生成佈局,我們講這些資料傳送到隨後的步驟中,就像之前那樣,創作更多的建築和裝飾內容。
這裡是最終結果:
如果還記得,你會知道,我們還需要為每個庭院填滿內容,所以我們有四個類別需要生成:建築、內部道路,如花園這樣的裝飾內容和NPC。
庭院內的建築還有不同型別,如牆體、後院建築、子建築、或主建築,我會在隨後的建築編輯器環節介紹它。
對於裝飾內容,如內部花園,我們設計了一個特別的方式透過Houdini的計算利用虛幻引擎的PCG框架。
例如,一個內部花園會根據不同區域發生變化,比如富人區和平民區的花園是不一樣的,所以花園的某些部分需要由美術師預定義,如某些區域可用或不可用的樹木品種。
一些引數需要完全隨機,如樹木的位置或者花園形狀。為了處理這種要求,我們研發了一種名為Local PCG的流程,可以讓我們的美術師進行視覺化編輯,在虛幻引擎中創意原型。
這之後,我們將這個預製的東西透過其名字傳送到Houdini,如Waze或者一些關鍵引數,比如決定是否開啟樹木生成。
我們會讓Houdini的HDA來決定這個花園的形狀和分佈,如左側所示,我們將預製傳送到不同區域,那些小小綠色區域就是它的生成結果。
隨後,當我們將資料取回引擎的時候,會有一個後期處理將預製根據Houdini的輸出例項化。透過這種方法,我們的美術師可以視覺化對其創意原型,PCG元素,並控制這部分的關鍵外觀。與此同時,我們避開了輸入和輸出時較重的點雲資料,因為這很笨重且很耗時。
內部排列和NPC也是透過這個方法創作的,可以看到左側每個角落的預設,結果完全是由Houdini決定的,這就是細節內容部分。
古建築
接下來說古建築部分,之前說過,我們依然要填充每個區域的建築形狀和型別,虛幻引擎中的靜態網格資產無法被輕易改變大小或者tiling,所以我們研發並定製了建築格式來解決這個問題,當然,是透過定製化建築編輯器。
建築外觀方面,由於秦朝是中國歷史上較早的朝代,我們能夠得到的參照物有限,所以我們花了大量的時間查閱歷史博物館中的檔案,以及一些電影和電視影響,甚至是一些古墓出圖的圖片。比如右上方的圖片,實際上就是出土的圖片,這個小建築是古人用來裝去世之人靈魂的。我們透過這種方式試圖定義秦朝的建築外觀。
建築的結構部分,中式建築始終都有比較複雜的結構和屋頂形狀。所以,當我們試圖創作工具來幫助我們美術師快速創作建築的時候,我們需要做一些簡化。
經過一些工作,我們發現有兩個主要方面可以被工具研發處理:結構和模組。
模組指的是,我們可以講一個建築分為不同不分,如牆壁、窗戶、門、屋頂等等,所以我們按照其型別、大小和樞心對每個模組進行標準化。當移入引擎的時候,它們會被自動分類。
所以,當美術師創作一個建築,編輯器可以為它們找到必要資源。
建築的結構是一系列的緊湊方塊,它們被生成以代表建築的不同部分,就像右側圖片所展示的那樣。這樣我們就可以像堆積木一樣用不同箱體組成一個建築。
問題是,不同的箱體有不同尺寸,每一個表面可能都需要不同的tiling組合,這時候就需要使用建築語法。建築語法部分,我們的靈感來自於《駭客帝國覺醒》的技術demo,我們使用語法來定義古建築的外觀。
語法本身由字母和符號組成,如圖中有兩種顏色的C字母模組,兩者之間,我們還有不同的子模組,這是用語法表述一堵牆外觀的方式。
我們還研發了一個圖形介面讓我們的美術師互動編輯這個語法,所以他們不需要想象語法的視覺效果,這極大降低了工具的使用難度。
屋頂部分,中國古代建築的屋頂極其複雜,如左側,有很多種不同型別的屋頂,我們這裡需要做一些簡化。經過研究,我們發現一些節奏是可以區域性重複的,所以我們將它們分為不同型別,如圖中右側所示,例如單向、雙向,或者交叉雙向之類。
這裡我們做了大量的粗糙節奏,當美術師建造一個建築的時候,他們就不用再注意屋頂部分,我們研發了一個自適應邏輯,roof Logic來幫助他們。透過識別建築,編輯器可以為其選擇對的結構和屋頂模組。
這裡展示的是我們如何創作一個完整建築:
我們先做地基,然後是一層,二層,隨後手動增加屋頂。隨後替換一些模組,最後透過錨定系統改變尺寸。
為了更有效率地管理這些模組並複用它們,我們想到了新想法、新概念。第一個是建築模組,它包含單個模組資產和模組語法,這個模組可以移出或移入複用。這樣,當我們想要創作一個新建築的時候,就不用每次都重新開始做。
第二個概念是建築模板,它包含了一些有序的建築模組,這個模板可以放到一個建築方塊上,形成更大的建築。
就像之前提到的那樣,我們有一些操作,比如合併和裁剪來幫助我們的美術師快速重塑建築形狀。
可以看到,我們試圖為主結構增加兩個子結構。
有些建築可能需要部分調整大小,所以我們為此研發了一個錨定系統,透過使用這些錨定,我們可以修改建築某些區域性的大小。
我們還為它們研發了程式化功能,讓美術師們可以單擊幾次就能創作外觀不同的建築。
POI工具集
最後一部分是POI區域,在我們的城市中,有很多區域帶有獨特功能,而且無法透過統一的PCG邏輯生成。所以,這部分非常耗時間,且依賴非常重的手動擺放工作,我們為此專門設計了一個工具集。
我們的美術師可以使用POI工具集幫他們增強場景和可玩性設計的多樣性,比如圖片中,我們使用了NPC工具、繩索工具或者曲線分散工具幫他們更快速擺放更多物品。
框架方面,我們在虛幻引擎C++中有一個TooBase class來概括一些基礎功能,如初始化或退出處理。我們還有一個繼承自它的base class來處理一些滑鼠互動操作,如點選或拖拽。
我們還有一些繼承自它的工具,如曲線分散或牆壁工具、NPC工具。每個工具都會生成一個名為生物群落代理類(proxy class),後者可以例項化到世界中。
我們使用藍圖系統來拓展生物群落代理類,並透過藍圖系統觸發虛幻引擎PCG框架。所以,我們的美術師可以把這些工具拓展到不同的功能上。
我們來看看這些工具:
我們用曲線分散工具在建築前創作一些馬車,這是POI區域最常用的工具。
我們還透過之前提到的識別結構箱體生成建築前面的標誌
我們透過使用NPC工具來生成街上的行人
我們透過城牆工具創作城牆,而且可以透過拖拽的方式自動適應大小,方便美術師的使用,它還支援在城牆模組之間插入建築。
這裡我們在城市之外生成一些農田。這個工具支援不同節奏,如直線或者曲線節奏,還支援在田地裡生成一些設施,如農民或者一些輔助設施。
總結
如此前所說,如果我們嘗試用手動方法創作這個超大城市,就需要336人-月,每次迭代就需要32人-月,基本而言,這種方式不可能做出來。
透過使用我們的古代城市工具集,我們成功將研發時間縮短至9人-月,迭代時間縮短至0.5人-月。至於未來,我們認為虛幻引擎PCG框架可能在遊戲研發的PCG部分扮演更大的角色,所以保持期待。
最後,感謝我的古代城市研發團隊,我們去年非常辛苦地做這個專案,最終我們做到了,很榮幸成為其中的一員。
····· End ·····

GameLook每日遊戲產業報道
全球視野 / 深度有料
爆料 / 交流 / 合作:請加主編微信 igamelook
廣告投放 : 請加 微信:Amyly588
  長按下方圖片,"識別二維碼" 訂閱微信公眾號
····· 更多內容請訪問 www.gamelook.com.cn·····
Copyright © GameLook® since 2009
   覺得好看,請點這裡 ↓↓↓ 


相關文章