天天看點

[轉載]SDL 用法,第 3 部分:圖形設計

SDL 用法,第 3 部分:圖形設計

"Pirates Ho!" 的故事開發和圖形設計

Sam Lantinga 和 Lauren MacDonell

Loki Entertainment Software

2000 年 4 月

内容:
故事重要性
故事開發
靈感
畫面
參考資料
關于作者
[轉載]SDL 用法,第 3 部分:圖形設計
Sam Lantinga 和 Lauren MacDonell 目前正在為 "Pirates Ho!" 開發故事和進行圖形設計,這是他們為 Linux 開發的原創探寶曆險角色扮演遊戲。在日記的這一部分中,作者講述了故事開發過程以及他們的靈感源泉。他們還詳細說明了如何設計遊戲中使用的圖像。

好的遊戲由故事和畫面組成。我們相信某些遊戲需要比其它遊戲更好的故事。在構思故事時,我們依賴于特殊的開發規則和我們的想像力。而畫面同樣是技術和創造性過程的結合。

好故事的重要性

某些遊戲玩家說好的情節構成了一個好遊戲。而另一些說複雜和逼真的圖像使遊戲玩起來更過瘾。在 "Pirates Ho!" 中,遊戲的決定性因素是故事。

為什麼要在故事上投入這麼多精力?首先,"Pirates Ho!" 是一個冒險遊戲,是以遊戲中的打鬥場面都是圍繞着故事情節展開的。如果我們開發的是街霸類遊戲,就不必将情節限制到與壞人作戰和收集财寶。但建構遊戲需要的角色扮演成分需要扣人心弦的故事情節作為人物開發和互動的基礎。

根據以往的經驗,我們還發現好的打鬥和政策遊戲有很多,而好的角色扮演遊戲卻很少。考慮到構思好的故事所要投入的時間、精力和創造力,這倒也合理。但這對于那些除打鬥和政策之外還喜歡好的故事的玩家而言卻是不幸的。是以,我們決定在最大可能範圍内開發所有這些成分。遊戲中不僅包括了驚心動魄的打鬥和具有挑戰性的戰略成分,還講述了一個完整的故事,我們希望玩家能從中豐富其經驗。

最後,我們希望 "Pirates Ho!" 能引起廣泛的注意。我們有許多熱心的讀者和影迷朋友,他們并不是遊戲迷,但他們說過他們也會因玩過一個很棒的冒險遊戲而感到興奮并由此而産生興趣。我們希望結合了政策、打鬥和角色扮演的 "Pirates Ho!" 能夠吸引鐵杆遊戲迷和非遊戲迷。

故事開發過程

在某些情況下,故事開發純粹是一個創造性過程,而不是技術過程。然而,在 "Pirates Ho!" 中,我們在開發故事時卻面臨了各種各樣的技術問題。

程式設計技術就引起了一個技術問題。我們不能為玩家設計出遊戲引擎不能支援的場景。例如,我們不能将大規模海戰直接寫到遊戲中,因為我們開發的戰術戰鬥系統同時隻能處理幾艘船之間現實和具體的戰鬥。是以,它并不适合于開發涉及大規模政治沖突和其它全球性事件的主要情節。幸運的是,光是個别人物之間的關系和小規模戰争就已經足夠開發出一個好故事了。

我們開發故事也是一個技術過程,就是說,我們系統地和慎重地選擇要使用的元素。除了包括所有我們認為有趣和好玩的老一套之外,我們還嘗試建立适當的元素組合以促進人物開發和互動,這樣才能跟上遊戲的發展,使玩家關注下一步會發生什麼。我們嘗試建立一種故事情節,它能給予玩家很多機會來影響遊戲環境并使玩家能友善地開發和改進人物。

構成虛構遊戲世界的細節是故事開發的主要部分。我們拟定了遊戲的社會和文化背景,以便給我們一個開發主要情節的環境。我們贊成這個世界中應該包括不可思議的事、地方和生物,以及具有魔力的人。但我們還沒有确定魔法的範圍有多廣,以及誰具有魔力。有了魔法就使故事情節的發展變得更為撲朔迷離,使人物具有更廣範圍的動作。

靈感的源泉

在構思故事時,我們從各種原始資料中汲取靈感。當然,我們開始研究的還是經典海盜故事,如 金銀島 (Treasure Island)。這些故事使我們了解這類故事的一般規律:

  1. 好人(相對來說)發現或繼承了一張地圖,或者接收到指令要去見某人,而這個人最終會給他一張地圖。
  2. 好人與壞人發生沖突,壞人想要得到地圖并且/或者幹掉好人。
  3. 壞人抓住了好人并且/或者從他身邊奪走地圖。
  4. 好人不得不逃亡并且/或者從壞人那裡搶回地圖。
  5. 好人找到财寶,殺死或打傷了壞人。

我們的故事符合基本規律,但各個事件可能不是按以上列出的順序發生,并且每件事可能發生好幾次。可選的故事元素包括愛情小插曲(必定有人受到了壞人的綁架),各種好人的聯盟,增添喜劇效果的蠢人。我們包括了至少一個可選元素,但您必須等待以找出是哪些。

由于我們的遊戲是在一個虛幻世界中,我們還希望結合一些在西方文學作品中不常與海盜聯系在一起的元素。在故事中添加異國情調的成分使我們感到遊戲更有趣味,我們希望這對玩家也能産生同樣的效果。例如,大多數地名都引用了古波斯語。我們從許多故事借鑒了構思,如“天方夜譚”、Terry Pratchett 的 "Discworld" 系列和“南方公園”。

畫面

概念藝術畫

在設計遊戲的圖像時,我們首先在紙上畫出構思的輪廓。我們的概念藝術畫從素描和人物線條畫開始,經過了各個階段的發展,使用了各種媒體,逐漸變成了遊戲中使用的圖像。這個過程非常重要,因為它可以讓我們使用不同的視覺元素,并确定實作我們所期望的視覺效果的最佳方法。将構思畫在紙上給朋友們看可以幫助我們得到回報意見。這裡有一些 "Pirates Ho!" 概念藝術畫的樣本:

對話界面
[轉載]SDL 用法,第 3 部分:圖形設計
小鎮界面
[轉載]SDL 用法,第 3 部分:圖形設計
地圖界面
[轉載]SDL 用法,第 3 部分:圖形設計

圖形設計

我們使用 Bryce4、Fractal Design Painter 4 和 GIMP 完成了 "Pirates Ho!" 的一些初始畫面。以下是我們建立圖像時使用的一些技術的簡要描述。

艦船原型

要建構艦船的模型,我們組合了 Bryce 中的基本幾何圖形。使用布爾運算符來結合使用正和負的形式,我們建立了艦船的所有基本形狀。對于艦船的身體,我們生成了一個扁球體,并長方體覆寫其上半部分。在将球體的值設定為正,将長方體的值設定為負,然後将它們并為一組之後,隻看得出球體的底部、具有船隻形狀那一半。我們添加了三根又高又細的圓柱體作為桅杆,然後建立了帆。對于帆,我們組合了一個正的扁圓柱體和一個與之略有錯位的負的相似扁圓柱體。這就意味着正的圓柱體正面的邊緣部分是可見的,看上去或多或少像鼓起的帆。下一個挑戰是建構使艦船有些特征的細節部分,如欄杆、大炮和其它小玩意。

布爾圖像生成 布爾圖像生成是一種圖象生成過程,在這種方法中,“正”對象占據的空間被“負”對象扣除,生成一個被挖掉一部分的對象,或者兩個或多個對象組合成一個結合了所有起作用對象的品質和體積的合成對象(請參閱參考資料中的 Bryce4 使用者指南)。
[轉載]SDL 用法,第 3 部分:圖形設計
島嶼

我們使用 Bryce 中的地形編輯工具來建立島嶼。我們使用地形編輯器中的畫筆功能徒手畫出島嶼的外形。我們使用高地和侵蝕畫筆功能建立了不同的地形效果。我們為島嶼使用了不同的材質,最後确定使用“地中海丘陵”,其特征是灌木叢生,到處是岩石;一些看上去像岩石的材質适合于一些更小的島嶼。下一個難題是在島上添加村莊、小鎮、碼頭和人類社會的标志。主要建築風格最好用造型簡單、粉刷的一兩層建築。這不僅是因為它們易于模組化,而且它很像真的地中海村莊。

[轉載]SDL 用法,第 3 部分:圖形設計
世界地圖

我們使用 Painter 4 建立地圖。在研制地圖之前,我們花了很長時間觀察實際圖檔和十六和十七世紀地圖的複制品。遊戲世界地圖的所有元素都以我們在研究時發現的特征為基礎。我們徒手繪制出島嶼的輪廓,然後不斷調整它們,直到我們對顔色和形狀感到滿意。在将島嶼放到地圖上時,我們嘗試産生一種适合于旅行和經商的最佳排列,并且使這片區域的地理位置看上去不像是精心規劃過的。最後,我們對地圖應用紙張材質,并不斷編輯它,直至它看上去非常古老。

[轉載]SDL 用法,第 3 部分:圖形設計
人物顯示螢幕

我們還使用 Painter 建立了人物顯示螢幕的原型,這個螢幕将在遊戲開始時使用,以顯示人物的統計資料和其它資訊。為建立此螢幕的背景,我們複制了部分包含木闆紋理的圖形。我們略微調整了顔色和紋理,并使用經過修改的紋理建立看上去象船體特寫的木闆。

我們通過導入 Sam 穿着海盜服裝的數字照片來建立人物肖像,将它填到大小合适的字段中,并使用 Painter 中的紋理工具應用紙張顆粒以及畫筆來改變照片的效果。我們添加了架構,因為螢幕看上去有一點平,而肖像位于沒有架構的背景上看起來不舒服。為建立架構,我們采用描金木制架構的圖檔,逐段複制并粘貼它,直到它大小合适。我們添加了卷軸以突出顯示人物的姓名,并使它與螢幕上的其它資訊分開。我們通過下載下傳一個卷軸圖像來建立它,并更改它的顔色和形狀以适合我們的顯示螢幕。

然後添加一個值與背景大緻相同的半透明字段來顯示人物統計資料。我們讓它部分透明,因為我們想要顯示出木闆;那樣螢幕的左邊的詳細資訊稍多一點,這就與肖像保持了平衡。為形成對比,我們添加了作為人物統計資料和曆史記錄的白色文本字元(人物統計資料和角色扮演系統的其它元素會在将來的文章中讨論)。

[轉載]SDL 用法,第 3 部分:圖形設計

遊戲菜單螢幕

對于主菜單,我們想要有一種類似于發光螢幕的明亮虛幻的效果。我們建立一個海景作為背景,并在工具箱中查找合适的工具制作按鈕。我們最終使用 GIMP 建立按鈕,GIMP 有許多徽标插件和帶免費字型的文本效果。我們不斷嘗試,直到找到接近我們要求的一種字型和效果。我們決定使用 "Glowing Hot" 和 18 号 Dragonwick 字型。

我們發現 GIMP 生成帶層次的徽标,通過操縱這些層次可以對普通徽标輸出執行很有趣的操作。我們消除了原來建立框按鈕的想法,我們除去了背景層以直接在菜單圖像的文本邊緣獲得一個鮮明效果。我們将圖像儲存為 PNG 格式圖像,PNG 格式儲存阿爾法通道,它可以由 SDL_image 庫直接讀取并以位塊方式傳送到螢幕。在測試過程中,我們将 SDL 阿爾法通道以位塊方式傳送的速度提高了将近 100%,并将這些優化放進了 SDL 1.1.3 CVS 代碼庫中。

我們還發現,通過除去不包括有鮮明效果的那層以外的所有 "Glowing Hot" 效果層,得到了比原來更明亮的按鈕文本。我們在主菜單中使用了這種技術,當滑鼠移到菜單選項上時,菜單選項就會“變亮”。

[轉載]SDL 用法,第 3 部分:圖形設計

遊戲的外觀

目前,我們已經嘗試完成了這樣一個外觀,它既适合遊戲世界的技術層,又或多或少酷似 17 世紀的歐洲。例如,我們建立了符合當時藝術風格的世界地圖和人物肖像。至于陸地和海景,我們使用明亮的顔色喚起對熱帶風光的聯想,因為遊戲世界中的天氣有點像加勒比海氣候。當然,我們期望遊戲的外觀會随着我們添加新元素以及不斷改善使用設計工具的技巧而變得更為漂亮。

展望未來

我們剛準備好開始認真進行圖形界面工作,我們将在下一篇文章中詳細讨論這項工作。遊戲中出現的卡通片段也正在計劃中。下一篇文章還将讨論腳本語言和使用 Lex 和 Yacc 建構使用者界面。

參考資料

  • GIMP 使用的免費字型 (Free fonts for use with the GIMP)
  • Pirates Ho! 網站
  • 請參閱樣本的 二進制代碼
  • 我們使用的 SDL 圖像 (SDL_image) 庫
  • SDL_mixer 庫
  • smpeg 庫
  • Sam 向您介紹 “SDL:使 Linux 好玩”,在 developerWorks 站點上
  • Sam 和 Lauren 發表的本系列,在 “SDL 用法:"Pirates Ho!" 的誕生”中講述了他們如何設計遊戲概念,在 developerWorks 站點上
  • 介紹 SDL API (An introduction to the SDL API)
  • Freshmeat,一個很好的開放源碼項目的資源庫
  • 各種軟體下載下傳,有各種價格
  • 一個組織得很好的 Windows、Mac 和 Linux 圖形、程式設計和其它軟體包集合
  • Canoma:從掃描的數字照片建立照片現實的 3 維模型
  • SciTech 圖形庫 (The SciTech graphics library)

一些 Linux 上最好的遊戲:

  • Maelstrom
  • Hopkins F.B.I.
  • Descent 2
  • Civilization: Call To Power
  • MythII: Soulblighter
  • Railroad Tycoon II
  • Game developer's newsgroup
  • 神話 2:Soulblighter 的評論 (A review of MythII: Soulblighter),在 LinuxWorld 中
  • "Games users play",在 LinuxWorld 中
  • “在 Linux 上建立的全新文明 (A whole new civilization built on Linux)”,在 LinuxWorld 中

關于作者

Sam Lantinga 是 Simple DirectMedia Layer (SDL) 庫的作者,現在是 Loki Entertainment Software 的首席程式員,這家公司緻力于生産最暢銷的 Linux 遊戲。他與 Linux 和遊戲打交道是從 1995 年開始的,從事各種 DOOM! 工具移植,以及将 Macintosh 遊戲 Maelstrom 移植到 Linux。

Lauren MacDonell 是 SkilledNursing.com 的一位技術作家,也是 "Pirates Ho!" 的合作開發者。在工作、寫書或跳舞之餘,她照管着她的熱帶魚。

繼續閱讀