過程生成

過程生成技術是一種可以廣泛套用的媒體製作技術,它的程式能夠自動生成內容,而不是設計者之前就設計好的,這意味著必須有一個創造的過程。套用過程生成技術的遊戲是一種讓電腦實時或按要求的生成宇宙的技術,而不是預先製作好。因此,創造出的宇宙理所當然很大很大。數以萬億的世界,等待著冒險者們的探索,然而大多數可能永遠不會被發現。

原理

過程生成是怎么實現的呢?簡單的說就是一個連列方程組,裡面有一個變數供用戶輸入來改變結果。這個變數就叫“種子”。下面用個例子來說明:

5 + x = y

如果你輸入的x是5,結果y就是10,如果x等於10,結果就是15。這些結果永遠都會是一樣的!5+5永遠是10,5+10永遠是15。當然,用在過程生成里的等式比這個複雜多了。看上去結果是隨機的,其實只要輸入相同的“種子”,即使在不同的計算機上結果也肯定是一樣的。

在物理層面,過程生成其實比傳統編程用的物理存儲空間要少。存在你硬碟里的只有代碼(最多只有幾兆)。而這種代碼就稱為“種子”。如果輸入的“種子”不同,生成的數值就大不一樣。不過這套機制在各個層面都是一樣的。比方說你路過某個公園,以後不管你離開多少次,再回來的時候這個公園也還會是完全一樣的。這個問題的關鍵就是“種子”永遠是一樣的。

當然這個技術也有不足之處,雖然每個數值都不一樣,但是它們之間會有很多相似之處。 不過這也沒什麼可遺憾的,因為我們生活的這個世界就有很多相似的東西!

過程控制與遊戲

隨著每一代的新主機的降臨,創造遊戲的成本,不論是時間還是資金,都飛速地增長。而小型開發組無力應付這樣的增長,“內容的自動生成”於是便有了用武之地。自動生成的內容是由計算機算法創造出來的,而不是由美工精心雕琢而出的。這樣的內容完全是動態生成,或者可以在一些(比如由用戶或文本檔案的)外部輸入的基礎上來生成。

優點

在IntroversionSoftware的最新遊戲《核戰危機》(《DEFCON》)里,真正由創作的內容只有音效。遊戲中幾乎所有的其他內容都是來自於公之於眾的信息——城市的位置,多變的海岸線的經緯度,國家的邊境線等全都可以在網際網路上免費獲取。在《Darwinia》中的場景是有幾行代碼自動生成的——如果這其中的每一樣都要手工來做的話,不知道要花費多少時間。又比如像《GTA3》一樣的遊戲。你可以為了一個城市花上幾個月的時間,為它增加建築,為遊戲世界鋪上材質。或者你可以花費幾個星期的時間,來研究一個自動生成這些城市的方法。這樣做的成果是有幾乎無限數量的城市供你遊玩,而開發時間卻被大大減少了。

你也許會不服氣,認為這樣創造出來的城市遠沒有手工製作地那樣精細,但這全看你在這些動態內容上投入多少精力。你的動態建築可以是簡單的方塊,加上窗戶和門的貼圖,或者這些逼真的窗子可以是基於建築本身的設計和大小生成出來的,窗戶的貼圖甚至可以依據放置在邊上的鄰居的房子來改變。作為一個只有有限數量員工,並且沒有3D模型師的公司,這顯然是一個比花費數月手工製作成堆的模型更可取得方案。

自動生成內容還能讓你大大增加遊戲的廣度。就用前一個例子,在一個手工建造的城市和十萬個可比較的自動生成的城市間選擇,答案是顯而易見的。WillWright的《孢子》(《Spore》)就將這個概念發揮到了極致——整個星系,大到星系系統,小到這些星系裡行星上的微生物,都由每個開始遊戲的玩家動態生成的。

其實自動生成內容並非是一個新鮮事物——事實上,多數早期的電子遊戲都將自動生成作為將大量數據裝進那個時期僅有的相對較小的媒體中的唯一手段。《精英》(《Elite》)及其續作《邊境》(《Frontier》)就是典型的例子——動態生成的星系系統,動態生成的關卡,以及一整套其他的特色內容全都是程式生成的——一個本質上無窮盡的宇宙就這樣被裝進了一張軟碟里。 當然,你能夠用程式生成的不僅是靜態的模型和形狀。貼圖,音效,甚至動畫都可以由算法在運行(runtime)時被創造出來。

再回到先前的例子,《Spore》的一大特色就是能動態生成玩家創造的生物的動畫和貼圖。動畫是根據給定生物的骨骼解剖架構動態創造出來的,這包括行走,奔跑,進食,甚至舞蹈。這個生物的貼圖和它的身形完全匹配,而它的身形是由頭部,胃部,背部和身體上其他部位的位置決定的。

另一個更加極端的例子是文章開頭提供的一個叫做《.kkrieger》的演示作品。這是一款第一人稱射擊遊戲,其中的任何東西都完全有程式自動生成。關卡(只有一個關卡,這畢竟只是一個演示作品),貼圖,模型,動畫,音效——全都是由遊戲在運行時動態創造的。更加令人叫絕的是,這樣華麗的圖像(考慮到所有因素而言),整個遊戲只有96kb——你下載這篇文章里都包含不止96kb的信息量!如果所有的數據都是預先製作好,並且以傳統的方式來存儲的話,它很有可能占幾百兆的空間。

缺點

當然,自動生成內容也有些許不足。對於初學者來說,如果你的整個遊戲都是由程式自動生成出來的,就很難有外觀別致的場景——很容易得到儘管布局不同,卻十分雷同的關卡。這意味著一定程度的人為介入是讓遊戲變得光鮮所必需的。 《Darwinia》就是一個很好的例子——《Darwinia》的布景是接受簡單字元串輸入後由程式自動生成的,但遊戲裡所有的建築都是手工擺放的,設計者還寫了一部分由腳本控制的事件序列。儘管團隊嘗試過完全隨機動態地生成關卡,但發現要產生玩起來有趣的場景,添加特殊場景是極其困難的。

另一個致命的不足是動態生成內容所要花費的時間。比如,也許生成城市裡的一棟建築只需要花費不足一秒鐘的時間,而一旦你要生成整個城市裡的幾百棟建築,以及道路系統,這就會累積成一段明顯的停頓時間。這個問題在前面提到的《.kkrieger》中尤為明顯——遊戲開始前會有一段冗長的“讀盤”時間,其間關卡中的所有內容正在生成。這也意味著運行這樣的遊戲要比預製預存的遊戲需要一台CPU更強勁的電腦。

總結

儘管如此,程式自動生成內容對小型開發團隊來說是一個關鍵的工具。而且有些人可能還會持有這樣的觀點——這將是業界的未來。隨著開發成本鋪卷開來,難以控制,發行商們變得越來越不敢冒險,嘗試投資新生作品,情願守著那些已經嘗試過和考驗過的方法,也不願發掘原創作品。使用程式自動生成的方法可以降低成本,開發者們可以獲得更多的自由來測試新的想法。

相關詞條

熱門詞條

聯絡我們