當前位置:編程學習大全網 - 編程語言 - 過程生成的過程控制與遊戲

過程生成的過程控制與遊戲

隨著每壹代的新主機的降臨,創造遊戲的成本,不論是時間還是資金,都飛速地增長。而小型開發組無力應付這樣的增長,“內容的自動生成”於是便有了用武之地。自動生成的內容是由計算機算法創造出來的,而不是由美工精心雕琢而出的。這樣的內容完全是動態生成,或者可以在壹些(比如由用戶或文本文件的)外部輸入的基礎上來生成。 在IntroversionSoftware的最新遊戲《核戰危機》(《DEFCON》)裏,真正由創作的內容只有音效。遊戲中幾乎所有的其他內容都是來自於公之於眾的信息——城市的位置,多變的海岸線的經緯度,國家的邊境線等全都可以在互聯網上免費獲取。在《Darwinia》中的場景是有幾行代碼自動生成的——如果這其中的每壹樣都要手工來做的話,不知道要花費多少時間。又比如像《GTA3》壹樣的遊戲。妳可以為了壹個城市花上幾個月的時間,為它增加建築,為遊戲世界鋪上材質。或者妳可以花費幾個星期的時間,來研究壹個自動生成這些城市的方法。這樣做的成果是有幾乎無限數量的城市供妳遊玩,而開發時間卻被大大減少了。

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

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

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

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

另壹個更加極端的例子是文章開頭提供的壹個叫做《.kkrieger》的演示作品。這是壹款第壹人稱射擊遊戲,其中的任何東西都完全有程序自動生成。關卡(只有壹個關卡,這畢竟只是壹個演示作品),貼圖,模型,動畫,音效——全都是由遊戲在運行時動態創造的。更加令人叫絕的是,這樣華麗的圖像(考慮到所有因素而言),整個遊戲只有96kb——妳下載這篇文章裏都包含不止96kb的信息量!如果所有的數據都是預先制作好,並且以傳統的方式來存儲的話,它很有可能占幾百兆的空間。 當然,自動生成內容也有些許不足。對於初學者來說,如果妳的整個遊戲都是由程序自動生成出來的,就很難有外觀別致的場景——很容易得到盡管布局不同,卻十分雷同的關卡。這意味著壹定程度的人為介入是讓遊戲變得光鮮所必需的。 《Darwinia》就是壹個很好的例子——《Darwinia》的布景是接受簡單字符串輸入後由程序自動生成的,但遊戲裏所有的建築都是手工擺放的,設計者還寫了壹部分由腳本控制的事件序列。盡管團隊嘗試過完全隨機動態地生成關卡,但發現要產生玩起來有趣的場景,添加特殊場景是極其困難的。

另壹個致命的不足是動態生成內容所要花費的時間。比如,也許生成城市裏的壹棟建築只需要花費不足壹秒鐘的時間,而壹旦妳要生成整個城市裏的幾百棟建築,以及道路系統,這就會累積成壹段明顯的停頓時間。這個問題在前面提到的《.kkrieger》中尤為明顯——遊戲開始前會有壹段冗長的“讀盤”時間,其間關卡中的所有內容正在生成。這也意味著運行這樣的遊戲要比預制預存的遊戲需要壹臺CPU更強勁的電腦。 盡管如此,程序自動生成內容對小型開發團隊來說是壹個關鍵的工具。而且有些人可能還會持有這樣的觀點——這將是業界的未來。隨著開發成本鋪卷開來,難以控制,發行商們變得越來越不敢冒險,嘗試投資新生作品,情願守著那些已經嘗試過和考驗過的方法,也不願發掘原創作品。使用程序自動生成的方法可以降低成本,開發者們可以獲得更多的自由來測試新的想法。

  • 上一篇:路燈編程
  • 下一篇:如何編程新年C語言
  • copyright 2024編程學習大全網