游戏开发技术
一、核心編程二、多媒體 三、互聯網 四、數據庫系統
首先,基本的數據結構、算法,數據流、線程、面向對象設計概念,模式等。
游戲軟件本質上是一個實時軟件。玩家透過軟件,與機器或其它玩家互動。它需要眩目的聲光效果、流暢的使用者輸入、操作機制、網絡資源等,這些項目的實作,都是與硬件高度相依的。因此,在底層技術的開發上,熟悉操作系統和開發環境比編程語言更重要。
某些基礎層次的技術,例如:游戲AI常用的決策樹、有限狀態機、路徑搜尋等算法,2D游戲使用的平面貼圖、矩陣、圖塊表、斜向視角、置換頁滾動條、調色盤、點畫、混色…等種種技術或特效,由于并不特別困難,且非常直覺;因而往往造成編程人員的錯覺,認為很容易就可以徹底掌握游戲所有的底層技術。
對開發人員而言,并不需要完全通曉所有技術底層的來龍去脈;反而,了解游戲軟件的基本架構,何種狀況何種需求下,應該使用哪些慣用技術,以及如何使用該技術,比技術的本身如何研發更為
游戲軟件開發的方式,有經驗者通常會設計專屬的工具,例如:場景、劇本、角色、道具編輯器…等,再根據每個項目的特色,例如:戰斗系統、階級系統、關卡系統、資源管理系統…等,做細部的修改、擴充、調整。(在網絡游戲中,重要的運算工作,則會轉移到服務器處理。)有時,為了彈性和靈活性,游戲的運算規則,不會直接寫在程序代碼內,而是獨立出來,以Scripting的方式控管。
將游戲開發工具化,有兩個主要的好處:首先是便于編程人員、企劃人員、美術人員的分工和整合;此外,亦很重要的是,這種方式有助于量產。也因為如此,在游戲界,主要的智慧資產通常不是編程人員,而是企劃人員。好的游戲不僅是聲光效果出色,其內容的豐富性、創意、整體的平衡度都必須達到一定的水平。
游戲軟件的設計,基本上相當符合面向對象/模塊化的精神;它將幾個主要的工具組合起來,每個項目、版本的更新調整,實際上拆解成每個工具各自的修正。因此,開發游戲軟件最大的挑戰,不在于某一方面的技術,而在于 “如何用技術表達游戲性的概念”,也就是如何將一個游戲項目拆解成獨立的工具,再巧妙結合起來。
二、多媒體的部份
既然是游戲軟件,前臺的影音效果、操作界面、2D、3D成像技術,這些都是不可或缺的,甚至可以說這是游戲軟件技術中最重要的一部份。底層技術方面,目前3D 的框架主流是DirectX和OpenGL/Open Inventor,前者是在Windows上運行,后者是可跨平臺的。
3D技術不僅應用在游戲界,它同時也是許多尖端工業、商業科技的關鍵技術。其基本原理,是將要顯示的畫面,以三角形頂點編碼成數據流,透過3D管線作業,決定可視區域、分辨率等級、幾何轉換及光源處理(Trasnform & Lighting; T&L)、材質、混色……的過程,最終成為顯示的象素。在現今的3D加速卡上,許多工作是由硬件來處理的;為了強化細部控制的彈性,近年來發展出一種可編程化的技術,也就是“著色語言”(Shading Language)。另一方面,基于游戲 型態和內容的變化,亦發展出各種適用于封閉或開闊的場景、建筑,角色單元、粒子系統、有機體的繪制、動畫…等特殊的算法和優化技術。此外,3D貼圖、陰影、特效,攝影技術莫不牽涉復雜的數學運算。
相較于絕 大多數的商業應用軟件而言,游戲所需的軟件技術是最廣泛最復雜的,光是要能夠使用游戲引擎開發出完整的游戲,就不是很容易的了。此處強調的重點是“術業有專攻”,游戲公司本身不可能去研發所有必須的軟件技術,因此對游戲制作人員而 言,不論是否自行研發,“知道怎么運用現行技術做游戲”比“知道怎么開發底層技術”更重要。同樣用做餅的例子來說,當然,懂得磨面粉,甚至很會磨,這很好,絕對有幫助!但是,游戲開發的技術關鍵在于 “怎么做出好吃的餅”,而非 “怎么磨出好的面粉”。
三、互聯網的部份
網絡游戲的開發當然不用去實作底層的TCP/IP,而是直接使用具有Network功能的函數/類庫即可。根據游戲型態的特性,當流暢性的需要較高,而安全性的顧慮相對下降時(例如動作類、射擊類、小規模的實時戰略游戲等),有時也會應用到UDP 。
網絡游戲Server/Client的基本運作方式是:運算由服務器處理,客戶端發出訊息請求,接到服務器響應(或收到其主動通知)后,作接口顯示的更新。為了處理網絡傳輸的延遲,在顯示上會利用種種平滑、預測的計算,求得較順暢的表現;更常見的做法則是把不重要的數據和運算,直接在前臺處理,但這種設計可能會導致不公正的結果。因此,如何在流暢性和安全/公平性之間取得平衡,也是在規劃時的一個不容輕忽的重點。
多人聯機網絡游戲目前的瓶頸在網絡I/O的部份,因為網絡游戲的聯機型態,和許多其它網絡應用服務,例如:FTP, Web Applications等不同,它的特性是高聯機數 (動輒數千上 萬)、高頻率、低流量。但I/O處理的部份,屬于操作系統層級,因此網絡實作的部份,往往和操作系統綁在一起,造成開發和移植的困難。 例如:在Windows上最適合開發網絡游戲的I/O模型是I/O Completion Port模型,在Unix系列,則是Asynchronous I/O模型;但目前在各平臺上廣泛使用的Socket API,并不直接支持對應的模型。當然,解決的方式有很多種,包括自行研發底層技術在內。(例如:筆者選擇的是使用ACE 框架,它是一個成熟的跨平臺的IPC框架,因而省去了許多麻煩。)
網絡游戲本質上是一個分布式系統,這不僅僅針對服務器/客戶端而言。為了要容納更多的玩家同時上線,在大規模的網絡游戲中,服務器不可能靠單一機器運作,采用多層(MultiTier)服務器架構是必然的,因此在比較復雜的系統中也可能必須解決服務器群組內的行程間同步問題。
四、數據庫系統的部份
最廣泛的還是關系型數據庫系統 (RDBMS),如:Oracle、MS-SQL、MySQL、PostgreSQL 等。 數據庫系統存取的性能,在某些游戲上也成為后臺性能的瓶頸;這也是某些游戲項目使用自行開發的數據庫的原因。因為數據庫系統并非專門為游戲所設計,所以它的普通的Blocking I/O方式比較不適合游戲的需求,其每秒鐘的查詢操作/事務次數遠低于網絡 I/O動作的次數。不過,這個問題可以很容易透過軟件的技術解決,例如:使用Thread Pool 或異步的I/O模型存取數據庫,或者采用MultiTier 的服務器架構,使用服務器叢集等。另外,當In-Memory Database 的技術成熟之后,也可以降低此部份的開發難度。(32位機器的內存尋址只到4GB,因此這個技術的普及應會在64 位的機器上)。比較理想的作法還是應該使用正式的數據庫系統,再配合軟件技術解決性能的問題。
游戲程序員并不需要完全了解數據庫系統的每一部份,只要知道如何與數據庫建立聯機、基本操作、數據表設計、索引建立、正規化、S Q L 語言、交易或預儲程序等。總之,開發游戲最重要的,是 “運用適當的工具”。
大多數游戲軟件偏好使用的是 “成熟的技術”而非 “尖端的技術”。但對新的技術和觀念,還是應該抱持積極接觸、思考的態度,不一定要學會它,但至少了解新的技術和觀念,適合用來做什么,可以怎樣運用。
技術以外:
不論你是否相信。當你在這個產業愈久,觀察的愈多,你會發現,在游戲界,編程技術以外的“能力”,有時甚至比“技術”本身更重要! (其實絕大多數的工作本就如此,在游戲界也不例外)最重要的一點,筆者認為,是團隊工作的配合度和能力。
游戲開發的工作,就像廚師,最終的目的是做出好吃的菜色(不是種菜也不是磨面粉),不是說技術不重要,它是根本。但不應把目光局限在技術上。一個游戲成功的因素很多,少了任何一點 (包括運氣),就有可能會失敗。技術可以讓編程人員加分,但不要因為技術的加分,反而在其它方面產生扣分的負作用。多觀摩成功者/產品的經驗,學習其中的思維觀點、設計規劃的理念、眼界和格局,將技術實踐為有價值、創新的產品,才是成功之道。
總結
- 上一篇: 电脑从U盘启动笔记本电脑如何启动
- 下一篇: 得了抑郁症的人的表现(抑郁症自愈的人可怕