二維圖像引擎
二維圖像引擎(以下簡稱引擎)是主要使用在二維遊戲中,繪製圖像,並向外部表達圖像的系統。在三維遊戲中,亦有使用二維引擎來繪製遊戲界面以及一些二維元素。
歷史
概述
一般來說,一套引擎可以使用在多個不同的遊戲中,即「可重用性」,由於引擎研發的投資較大,一個商業公司往往開發一款引擎,反覆用於多款遊戲,從而獲得較高利潤。如大宇公司的《軒轅劍系列》其正傳和外傳就是採用同一款引擎開發。也有本身不製作遊戲,專門開發引擎並出售的公司。這樣的引擎也稱作「商業引擎」。出於遊戲開發周期和開發成本的考慮,一些商業遊戲公司更願意購買「商業引擎」。
遊戲引擎的程序基礎是建立在使用圖形API函數基礎之上的,而不是直接控制顯卡,主要適用於2D圖像的API是DirectX,而純2D圖形API往往不能提供更豐富的圖像操作支持,一些引擎也使用用於3D圖像的API如OpenGL,Direct3D等來模擬2D。
引擎組成
由於二維遊戲的圖像都是平面結構,所以圖像引擎在顯示圖像之前也往往只對圖像本身進行處理,而不像三維遊戲那樣還要處理圖像周圍的環境。這種處理一般是將圖像伸縮,變形,色彩處理,圖像合成等。圖像引擎還可分為以下幾個部分。
角色圖像
在二維遊戲中,角色的動作是靠一系列由美工預先設計好的圖像,按照一定的速率連續顯示來實現。就像播放電影的方法一樣。而考慮到角色移動帶有方向性,角色的一種動作往往要以不同的方向繪製許多組。在早期DOS遊戲中,為了節約資源,角色動作往往只有四個方向,而後來的RPG遊戲則往往是八個方向,或十二個方向。方向的多少影響着角色動作的流暢度,也極大的影響遊戲占用資源的多少。一種緩和的辦法是採用「紙娃娃系統」。
場景地圖
場景地圖是承載全部遊戲內容的場所。引擎對付地圖的辦法大致可分為兩種:整版式和貼圖式。前者是直接將整張圖像作為地圖來顯示,這樣的好處是美工可以針對不同的場景單獨繪製不同的地圖,但由於地圖的不可拆分性,整版式地圖也是最占用資源的。後者貼圖式則正是針對前者的劣勢,在貼圖式地圖中,美工並不直接繪製地圖,而是繪製許多細小的地圖元素,如一塊草地,一個池塘,一棵樹等,並在此之後,將數量一定的元素組合併接成完整地圖。這種解決辦法的劣勢就是場景變化度不高,容易出現完全相同的區域。
在貼圖式場景地圖系統中,每個地圖都是由一個貼圖方陣組成,根據單個貼圖的形狀,可以將貼圖式地圖分為90°和45°和30°地圖三種。90°的貼圖單元成矩形,一些早期DOS遊戲都是這種;45°的貼圖單元成正方形,一些早期RPG多用此種,如《網絡創世紀》;30°則是菱形,是時下比較流行的一種。三者相比起來,30°表現的場景最為自然。然而一些採用90°貼圖的遊戲有意將建築,設施等圖像傾斜繪製,模擬30°貼圖的畫面效果,如《傳奇》。
一般,引擎習慣將角色固定在屏幕正中央,並移動場景來實現角色行動的效果。這種效果也稱「地圖捲動」。
動態&光影
在二維遊戲中,或多或少的會使用一些特殊的效果,如圖像的淡入淡出,顏色的加強等。遊戲引擎中,一般有專門的系統負責處理圖像,由於這部分代碼比較常用且運算量大,好的引擎多用ASM語言書寫代碼。
此外,遊戲中的特效,如火焰,魔法技能,流水等都是引擎需要處理的內容。
其他技術
髒矩形技術(Dirty Rectangle)
在2D遊戲中,每次更新屏幕,都將會將整個屏幕上的圖像重新繪製一遍,而更新的內容往往不是很多,甚至只是一個小區域,強制重繪帶來了很大的資源浪費,尤其是在一些休閒遊戲、桌面遊戲中體現明顯。髒矩形技術正是利用只更新變化區域來達到提高引擎效率的目的。[1]在髒矩形系統中,屏幕上更新的區域被稱為「髒矩形」,引擎僅僅將髒矩形部分重繪,而其他部分保持原樣。
alpha混合
由於2D遊戲的平面性,導致一個物體對另一個物體時有覆蓋的情況。被覆蓋的物體則不可見,可能給玩家帶來不便。通常,遊戲開發者會將一部分被遮蓋的物體進行透明化處理。[2]這種透明化算法被稱為「alpha混合」,混合的對象主要是角色圖像,以便讓玩家知道被遮擋的角色身在何處。
此外,引擎在處理一些火焰,流水時,也常常使用透明化算法,使之更為真實。
圖像壓縮
在2D遊戲中,圖像是遊戲中最大的資源,而開發者為了壓縮遊戲所占的空間大小,往往在圖像壓縮上大作文章。被壓縮後的圖像,經過歸類,被放置在一個個「打包文件」中,通常,這些文件以.lib .pak作為文件名後綴。