【我們為什麼挑選這篇文章】任天堂的超級瑪利歐遊戲多年來都是是許多人心目中的經典遊戲,從過往的像素風格到現在的 3D 精緻立體風格,瑪利歐雖然已經過去了好幾代,推陳出新出各式各樣的版本與玩法,但紅白機仍然深植在多數人心中。而本篇文章所提到的開發者,或許也是其中一位充滿童年情懷的熱血工程師吧。(責任編輯:郭俐伶)
本文經 AI 新媒體量子位(公眾號 ID:QbitAI)授權轉載,轉載請連繫出處
作者:量子位
《超級瑪利歐》的重度玩家們可能已經發現,上圖這並不是原本 32 關裡面的遊戲關卡畫面。
不過,如果你以為這是《超級瑪利歐製造》的傑作,那你就猜錯了!這是 AI 利用 GAN (Generative Adversarial Network,簡稱GAN)做出來的!
利用 GAN 生成紅白機的遊戲畫面,並不是新鮮事,不過,這一次是可以無限延長的那種!
如何用 AI 做出永不破關的超級馬力歐?
首先,你需用到 4 個顏色通道表示物件,在遊戲中,關卡資料以壓縮格式存儲,通常,每個物件用兩個位元組來描述位置和類型。一個位元組指定 16×16 網格中的 xy 座標;第二個位元組指定物件的類型。比如在第一關的場景中,僅用了 12 個位元組來描述:
07 81 | 47 24 | 57 00 | 63 01 | 77 01 | C9 71
作者為了將關卡編碼為 16×16 的圖像,分別設置了 4 個獨立顏色通道:
比如,第一關的截圖,就可以表示成這樣:
這樣的編碼方式,既能夠涵蓋夠多物件,但又不會太過複雜。並且根據關卡中物件的排列方式進行分組,會利於模型進行學習並重現。比如,實心磚用來佈置樓梯、磚塊則通常水準放置。
此外,將所有物件組織成一個合理的方案,減少生成網路失誤對輸出結果的負面影響。
比如用硬幣代替磚塊,影響非常小;而如果用管道或庫巴來代替,就會出現問題。
開發者還找出了遊戲的一些特點:
管道可以連接地面或一排浮動塊;
方塊通常用來構建各種尺寸的樓梯;
磚塊和問題塊,大多排在第 3 位和第 7 位;
其他角色一般會分成兩三組。
接下來,作者使用 TensorFlow 作為後端,利用 Keras 來構建模型,並進行訓練。
生成器通過輸入的一組特徵向量,來生成新的樣本圖像;鑒別器則區分是訓練集中的真實圖像,還是生成器偽造的。隨著遍歷訓練集的次數增加,生成效果也逐漸改善
下面最終輸出的結果:
嗯,效果真的還不錯!
想做出永不通關的畫面?用cGAN 就對了
現在,只需把一張張「截圖」連接起來,然後你就會得到半個庫巴、半個管道,以及半個瑪利歐…..
如何做到無縫拼接,得到連貫的關卡呢?這就需要利用「有條件的 GAN」,把前一個場景作為後一個場景的邊界條件,就像這樣:
可以看出場景的左側部分,是以第一行圖像作為邊界條件生成的。
具體來說,首先要在之前的基礎上,向生成器輸入一組16×4的圖像,作為上一個場景的邊界部分。
網路架構是這樣的:
生成器在輸入條件的限制下,生成16×16的圖像,然後,把它們與16×4的輸入圖像進行拼接,再用拼接後的圖像來訓練鑒別器。
利用16×4圖像的不斷反覆運算,最終就能拼接成連續的場景,比如,經過40次反覆運算的結果:
「不想通關綜合症」可能有救了!開發者表示,雖然效果不是特別完美,但是已經具備了趣味性和可玩性。
是不是和那個「能玩一輩子的遊戲」——《瑪利歐製造》有點像?它同樣主打關卡製造,不過是玩家來手動設計。
這種方式在發佈關卡之前,作者必須通關一次,於是有些人就加入隱蔽的「作者通道」,偷個懶直接到達終點。
不少高手都曾被「馬造毒圖」難倒,當然如果玩家發現隱蔽通道,就能通關。
而這樣「有趣又有毒」的關卡,不知道 AI 能否構建出來呢?
(本文經 AI 新媒體量子位 授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈爷青回!GAN生成的超级马里奥关卡,可以永不通关的那种〉。)
你可能會有興趣
你玩「小朋友下樓梯」最高紀錄是幾層?當年遊戲開發者現已是超強工程師!