運(yùn)行時(shí)引擎架構(gòu)

一個(gè)游戲引擎一般是由工具套件和一個(gè)運(yùn)行時(shí)組件組成。

目標(biāo)硬件

目標(biāo)硬件層,是將運(yùn)行游戲的電腦系統(tǒng)或者主機(jī)。

設(shè)備驅(qū)動(dòng)程序

硬件驅(qū)動(dòng)是比較底層的由操作系統(tǒng)或者硬件開發(fā)商提供的軟件組件。硬件驅(qū)動(dòng)管理硬件資源,把操作系統(tǒng)與引擎上層跟無數(shù)不同的可用的硬件細(xì)節(jié)操作隔離開來。

操作系統(tǒng)

在PC上,操作系統(tǒng)是一直運(yùn)行著的。它指揮著多個(gè)程序在一臺(tái)電腦上運(yùn)行,其中就包括你的游戲。這意味著PC游戲不能假設(shè)擁有硬件的所有控制權(quán)。

在游戲主機(jī)上,操作系統(tǒng)通常只是一個(gè)輕量級(jí)的庫,鏈接到游戲的執(zhí)行檔里。在游戲主機(jī)上,游戲一般完整的“擁有”整個(gè)硬件。

第三方SDK和中間件

大多數(shù)游戲引擎都使用了許多第三方的SDK和中間件,SDK提供基于函數(shù)或者基于類的接口一般稱之為應(yīng)用程序接口(API).

數(shù)據(jù)結(jié)構(gòu)和算法

STL. C++標(biāo)準(zhǔn)模板庫提供了大量的代碼和算法來處理數(shù)據(jù),字符串和I/O流

STLport. 這是一個(gè)輕量級(jí)的簡(jiǎn)化過的STL的實(shí)現(xiàn)版本

Boost. Boost是一個(gè)強(qiáng)大的處理數(shù)據(jù)結(jié)構(gòu)和算法的庫,被設(shè)計(jì)成STL的風(fēng)格。(在線的Boost文檔還是一個(gè)學(xué)習(xí)計(jì)算機(jī)科學(xué)的好地方。)

Loki. Loki是一個(gè)強(qiáng)大到讓你頭痛的通用編程模板庫。

STL在PC上面使用是沒有問題的,因?yàn)樗母呒?jí)的虛擬內(nèi)存機(jī)制對(duì)于小心的內(nèi)存分配不是那么嚴(yán)格(但仍然需要小心)。在主機(jī)上,由于受限的或者根本就沒有虛擬內(nèi)存機(jī)制,還有昂貴的cache miss開銷,你最好自己寫一個(gè)具有可預(yù)測(cè)的或者極少內(nèi)存分配的自定義數(shù)據(jù)結(jié)構(gòu)(在PC項(xiàng)目上這樣做的話也不會(huì)錯(cuò)到哪去).

關(guān)于STL標(biāo)準(zhǔn)在游戲應(yīng)用的問題和解決方案參考:http://www.open-std.org/jtcl/sc22/wg21/docs/papers/2007/n2271.html

圖形

Glide. 這是一個(gè)給老式Voodoo顯卡的3D圖形SDK. 它在硬件坐標(biāo)轉(zhuǎn)換和光照加速(hardware T&L)出現(xiàn)的時(shí)代非常流行。

OpenGL. 一個(gè)廣泛使用的輕便的3D圖形SDK.

DirectX. 微軟的3D圖形SDK,OpenGL的主要競(jìng)爭(zhēng)對(duì)手。

libgcm是一個(gè)底層的直接面向PS3的RSX顯卡的接口,是索尼提供的一個(gè)比OpenGL更高效的選擇。

Edge是一個(gè)由Naughty Dog還有索尼為PS3提供的強(qiáng)大的渲染和動(dòng)畫引擎,它被許多第一方及第三方游戲工作室采用。

碰撞和物理

碰撞檢測(cè)及剛體物理(在游戲開發(fā)交流中簡(jiǎn)稱為“物理”)由下面這些有名的SDK提供支持:

* Havok. 一個(gè)非常流行的工業(yè)水準(zhǔn)的物理及碰撞引擎

* Phy X. 另外一個(gè)具有工具水準(zhǔn)的物理及碰撞引擎,可以從NVIDIA那免費(fèi)下載。

* Open Dynamic Engine.(ODE) 是一個(gè)非常流行的開源物理/碰撞模塊。

角色動(dòng)畫

部分商業(yè)的動(dòng)畫包:

* Granny. Rad Game Tool的非常游戲的Granny toolkit包括了能支持所有主流3D制作軟件包括Maya和3DMax的性能優(yōu)良的3D模型及動(dòng)畫導(dǎo)出插件,一個(gè)能讀取和操作導(dǎo)出的模型及動(dòng)畫數(shù)據(jù)的實(shí)時(shí)庫,還有一個(gè)強(qiáng)勁的運(yùn)行時(shí)動(dòng)畫系統(tǒng)。在我看來,所有商業(yè)的或者私有的庫中,Granny SDK有是最著最好的設(shè)計(jì)及最符合邏輯的動(dòng)畫API,特別是它對(duì)時(shí)間的天才的處理。

* Havok Animation. 隨著角色變得越來越真實(shí),物理及動(dòng)畫之間的界線變得越來越模糊。那個(gè)開發(fā)了游戲的Havok物理SDK的公司決定制作一個(gè)免費(fèi)附送的動(dòng)畫SDK,它使得物理及動(dòng)畫之間的連接變得從未有的簡(jiǎn)單。

* Edge. Edge庫是Naughty Dog的ICE team為PS3開發(fā)的,他們是Sony Computer Entertainment America的工具及技術(shù)團(tuán)隊(duì),Sony在歐洲的高級(jí)技術(shù)團(tuán)隊(duì)開發(fā)了一個(gè)強(qiáng)勁的高效的動(dòng)畫引擎,還有一個(gè)為了渲染的高效的幾何處理引擎。

人工智能(artificial interlligence, AI)

* Kynapse. 一直到最近,人工智能一直是由每個(gè)游戲自定義的。不過,有家叫Kynogon的公司制作了一個(gè)中間層的SDK叫作Kynapse.這個(gè)SDK提供低級(jí)的AI模塊,包括尋路,繞開靜態(tài)和動(dòng)態(tài)的物體,發(fā)現(xiàn)某塊區(qū)域內(nèi)的弱點(diǎn)(例如,某個(gè)開著的窗戶可能就是埋伏的好地方),還有一個(gè)合理的關(guān)于AI及動(dòng)畫的接口。

生物的角色模型(Biomechanical Character Models)

* Endorphin and Euphoria. 這些是用真實(shí)人類移動(dòng)的高級(jí)生物模型制作的角色動(dòng)畫包。

平臺(tái)獨(dú)立層

大多數(shù)游戲引擎需要運(yùn)行在不同的平臺(tái)上,絕大多數(shù)游戲引擎架構(gòu)上都有一個(gè)平臺(tái)無關(guān)層。這一層建立在硬件層、驅(qū)動(dòng)層、操作系統(tǒng),還有其它第三方軟件上之,把引擎的剩余部分和大部分的底層平臺(tái)細(xì)節(jié)隔離開來。

他包裝了常用的C標(biāo)準(zhǔn)庫,操作系統(tǒng)調(diào)用,以及其它的基礎(chǔ)的API,保證引擎在所有不同的硬件平臺(tái)上的行為一致性。

核心系統(tǒng)

* 斷言(Assertions). 斷言是進(jìn)行錯(cuò)誤檢查而插入的用來捕獲邏輯錯(cuò)誤以及違反程序員本意的代碼。斷言一般在最終產(chǎn)品生成時(shí)被移走。

* 內(nèi)存管理(Memory management). 目前所看到的所有游戲引擎都實(shí)現(xiàn)了它自己一套內(nèi)存的分配機(jī)制,來確保高速的內(nèi)存分配及釋放以及減小內(nèi)存碎片帶來的負(fù)面影響(見5.2.1.4節(jié))。

* 數(shù)學(xué)庫(Math library). 游戲是天生的對(duì)數(shù)學(xué)要求很高的。正因?yàn)槿绱?,每個(gè)游戲引擎至少都有一個(gè)數(shù)學(xué)庫,如果沒有多個(gè)的話。這些數(shù)學(xué)庫為向量及矩陣運(yùn)算、四元數(shù)旋轉(zhuǎn)、三角運(yùn)算、對(duì)線、射線、圓、截頭錐體(frusta)的幾何操作等提供工具。插值(spline manipulation)、數(shù)值積分(numerical intergration)、系統(tǒng)方程式求解,以及所有程序員要求的其它功能。

* 自定義數(shù)據(jù)結(jié)構(gòu)及算法(Custom data structions and algorithms). 除非引擎設(shè)計(jì)人員決定完全的依賴第三方庫如STL,那么一堆用來管理基本的數(shù)據(jù)結(jié)構(gòu)(鏈表(linked lists)、動(dòng)態(tài)數(shù)組(dynamic arrays), 二叉樹(binary trees), hash maps, etc)及算法(搜索、排序等)的工作一般來說是需要的。它們一般是手動(dòng)編碼以求最小化或者消除掉動(dòng)態(tài)分配,以及確保在目標(biāo)平臺(tái)上最佳的運(yùn)行性能。

資源管理

每個(gè)引擎都有某種形式的資源管理器,它提供一個(gè)統(tǒng)一的接口(或者幾個(gè)接口)來存取任何及所有的游戲資源及其它引擎輸入數(shù)據(jù)。

渲染引擎(Rendering Engine)

渲染引擎是任何一個(gè)游戲引擎中最大和最復(fù)雜的組件之一。它通常采用分層結(jié)構(gòu):

低級(jí)渲染引擎

包括了所有的原始渲染引擎特性。它的設(shè)計(jì)目標(biāo)主要集中在高速渲染大量幾何圖元,不考慮場(chǎng)景的哪個(gè)部分是可見的。

圖形設(shè)備接口(Graphics Device Interface)

圖形SDK負(fù)責(zé):查詢可用的圖形設(shè)備,初始化它們,設(shè)立渲染面(Render surface)(后臺(tái)緩層(back-buffer),模板緩存(stencil buffer))等等。

在PC游戲中,你還需要把你的渲染器整合到Windows的消息循環(huán)中,這通常寫一個(gè)"消息泵"(message pump)去處理等待中的Windows消息,其余時(shí)間盡快的執(zhí)行渲染循環(huán)。但是,這樣耦合太大,后面會(huì)探討它的解決方法。

其它渲染組件

低級(jí)渲染器中的其它組件通力協(xié)作,目標(biāo)在于收集提交的幾何圖元(geometric primitives)(也稱渲染包(render packets)),如網(wǎng)格(meshes), 線段系列(line lists), 點(diǎn)系列(point lists),粒子(particles), 地形塊(terrain patches),文本字符串(text string)等,然后盡可能的繪制它們。

低級(jí)渲染器一般提供一個(gè)視口(viewport),它由camera-to-world矩陣及3D透視的參數(shù)如FOV(field of view)及近剪裁面及遠(yuǎn)剪裁面得出。低級(jí)渲染器也根據(jù)它的材質(zhì)系統(tǒng)(material system)以及動(dòng)態(tài)光系統(tǒng)(dynamic lighting system)來管理圖形硬件的狀態(tài)及游戲的著色程序(shaders). 每個(gè)提交的圖元都伴隨著一個(gè)材質(zhì),并且被n盞動(dòng)態(tài)光影響。材質(zhì)(material)描述了當(dāng)這個(gè)圖元被渲染的時(shí)候,圖元(primitive)所用到的貼圖(texture),硬件需要事先被設(shè)定的狀態(tài),以及哪個(gè)頂點(diǎn)著色程序(vertex shader)/象素著色程序(pixel shader)被采用。

場(chǎng)景圖/剔除優(yōu)化(Scene Graph/Culling ptimizations)

低級(jí)渲染器渲染所有的提交給它的幾何圖元,不考慮圖形是否確實(shí)可見。一般需要一個(gè)更高級(jí)的組件,才能基于某些可視性判別算法去限制提交的圖元數(shù)量。

對(duì)每個(gè)小的游戲世界,一個(gè)簡(jiǎn)單的視錐剔除(frustum cull)(去掉攝像機(jī)不可見的部分)是必要的。對(duì)于大的游戲世界來說,一個(gè)更高級(jí)的空間劃分(spatial subdivision)數(shù)據(jù)結(jié)構(gòu)可能用來提高渲染效果,它能對(duì)物體的潛在可見集(potentially visible set, PVS)進(jìn)行快速的檢測(cè)。PVS有多種形式,包括二叉空間分割樹(binary space partitioning),四叉樹(Quadtree),八叉樹(octree), 多維檢索樹(kd-tree),或者sphere hierarchy。Portals/occlusion culling等方法可能也會(huì)應(yīng)用到渲染引擎的這個(gè)層級(jí)中。

視覺效果(Visual Effects)

包括:

粒子系統(tǒng)(particle system),用于煙,火、濺起來的水花等

貼花(decal system),用于彈孔,腳印等

光照貼圖light mapping and 環(huán)境貼圖environment mapping

動(dòng)態(tài)陰影dynamic shadows

全屏后期特效full-screen post effect,作用在3D場(chǎng)景被渲染到離屏緩存上之后。

一些full-screen post effects的例子:

高動(dòng)態(tài)光照渲染(high dynamic range(HDR) lighting and bloom.)

全屏抗鋸齒(full-screen anti-aliasing(FSAA))

顏色糾正(color correction)以及各種濾鏡(color-shift)特效,包括跳躍漂白(bleach bypass),過飽和(saturation),去飽和(de-saturation).

前端(Front end)

大多數(shù)游戲都采用了一些2D的圖形放在3D場(chǎng)景上面來實(shí)現(xiàn)各種目的,如:

heads-up display(HUD)

游戲內(nèi)建菜單或者控制臺(tái),或者其它開發(fā)工具,它們可能不會(huì)從最終產(chǎn)品中移除。

剖析及調(diào)試工具(Profiling and Debugging Tools)

游戲是實(shí)時(shí)系統(tǒng),因此,游戲引擎開發(fā)者需要經(jīng)常剖析游戲性能,一便優(yōu)化。另外,內(nèi)存資源經(jīng)常緊缺,開發(fā)者也要大量使用內(nèi)存分析工具。

有許多好的通用的軟件分析工具,如:

Intel's VTune

IBM's Quantify and Purify(part of the PurifyPlus tool suite)

Compuware's Bounds Checker

大多數(shù)游戲引擎也加入一套自定義的性能查看及調(diào)試工具。它可能包含這些功能:

手工插入測(cè)量代碼,為某些代碼計(jì)時(shí)

游戲運(yùn)行期間,在屏幕上顯示性能統(tǒng)計(jì)數(shù)據(jù)

把性能情況轉(zhuǎn)存到文件文件或者Excel表格中的工具

計(jì)算引擎和子系統(tǒng)所耗內(nèi)存,并顯示到屏幕上

在游戲結(jié)束或者運(yùn)行中把內(nèi)存使用情況,峰值,及泄漏情況統(tǒng)計(jì)輸出

能在代碼改變調(diào)試輸出狀態(tài),開關(guān)調(diào)試輸出種類并設(shè)置輸出的冗長(zhǎng)級(jí)別

記錄游戲事件并回放的機(jī)制

碰撞及物理

碰撞檢測(cè)對(duì)每個(gè)游戲來說都是很重要的。沒有它,物體之間就會(huì)相互滲透,不可能跟虛擬的3D世界進(jìn)行任何合理的交互。有的游戲包含真實(shí)或半真實(shí)的動(dòng)力學(xué)模擬。這在游戲業(yè)中稱為“物理系統(tǒng)”,更正確的術(shù)語是剛體動(dòng)力學(xué)模擬,因?yàn)橛螒蛑型ǔV豢紤]剛體的運(yùn)動(dòng)(運(yùn)動(dòng)學(xué))及產(chǎn)生運(yùn)動(dòng)的力和力矩(動(dòng)力學(xué))。

第三方的物理SDK:

Havok. 今天業(yè)界的黃金標(biāo)準(zhǔn)。非常豐富的特性及全面的優(yōu)異的性能

PhysX. NVIDIA的。這是另外一個(gè)卓越的碰撞及物理引擎。它被整合進(jìn)Unreal Engine 3,還是PC游戲開發(fā)的一個(gè)獨(dú)立的免費(fèi)產(chǎn)品。PhysX本來是設(shè)計(jì)為Ageia的新的物理加速芯片的接口的。SDK現(xiàn)在被NVIDIA所有并發(fā)布,他們修改PhysX讓它跑在了公司的最新的GPU上

動(dòng)畫(Animation)

游戲中5中基本動(dòng)畫:

精靈/圖片動(dòng)畫(sprite/texture animation)

剛體層級(jí)動(dòng)畫(gigid body hierarchy animation)

骨骼動(dòng)畫(skeletal animation)

頂點(diǎn)動(dòng)畫(vertex animation)

形態(tài)目標(biāo)(morph targets, MT)

骨骼動(dòng)畫讓動(dòng)畫師使用相對(duì)簡(jiǎn)單的骨頭系統(tǒng)去設(shè)定精細(xì)三維角色網(wǎng)格的姿勢(shì)。

骨骼網(wǎng)絡(luò)渲染(Skeletal Mesh Rendering)組件是連接的渲染器跟動(dòng)畫系統(tǒng)的橋梁。動(dòng)畫系統(tǒng)為骨骼中的每一根骨頭計(jì)算出一個(gè)位置,然后將位置作為矩陣系列(palette of matrices)之一傳遞給渲染引擎。渲染器對(duì)每個(gè)頂點(diǎn)用矩陣系統(tǒng)中的一個(gè)或多個(gè)矩陣進(jìn)行坐標(biāo)變換,作出一個(gè)最終的混合的頂點(diǎn)位置。這個(gè)過程被稱之為蒙皮(skinning)。

人機(jī)設(shè)備接口(Human Interface Devices(HID))

游戲輸入:

* 鍵盤及鼠標(biāo)

* 游戲手柄

* 其它特殊的游戲控制器,如方向盤, 釣魚桿,跳舞毯, Wii遙控器,等等。

音頻

多人在線/網(wǎng)絡(luò)(Online Multiplayer/Networking)

許多游戲允許在一個(gè)虛擬世界中有多個(gè)玩家游戲。多人游戲至少有四種風(fēng)格:

單屏多人(Single-screen multiplayer). 兩個(gè)或多個(gè)人機(jī)接口設(shè)備(HID)(手柄, 鍵盤, 鼠標(biāo)等)連接到唯一一臺(tái)街機(jī)(arcade machine)、PC或者家用機(jī)(console)上。多個(gè)玩家共存在一個(gè)虛擬世界中,一個(gè)唯一的攝像機(jī)同時(shí)讓所有的玩家在畫面上。這種類型的游戲包括: Smash Brothers, Lego Star Wars, Gauntlet.

分屏多人(Split-screen multiplayer). 多個(gè)玩家共存于一個(gè)虛擬世界,多個(gè)HID連接到一臺(tái)游戲機(jī),不過每個(gè)人都有自己的攝像機(jī),屏幕也被分成多個(gè)區(qū)塊以讓所有的玩家都可以看到自己的角色。

多人聯(lián)網(wǎng)(Networked multiplayer). 多臺(tái)計(jì)算機(jī)或者家用機(jī)通過網(wǎng)絡(luò)連接在一起,每臺(tái)機(jī)器是其中某個(gè)玩家的主機(jī)。

大型多人在線游戲(Massively multiplayer online games MMOG).就如字面意思所示,成百上千的玩家,可以同時(shí)在一個(gè)巨大的、穩(wěn)定的、在線的由一個(gè)強(qiáng)大的中央服務(wù)器作為主機(jī)的虛擬世界中游戲。

多人游戲跟他們的單人版本在許多地方有相似之處。但是,支持多人游戲,會(huì)深切影響某幾個(gè)游戲引擎組件的設(shè)計(jì)。單人引擎改成多人引擎很困難,但是多人引擎改成單人引擎很簡(jiǎn)單。

游戲性基礎(chǔ)系統(tǒng)(Gameplay Foundation System)

"游戲性"(gameplay)指游戲內(nèi)進(jìn)行的活動(dòng)、支配游戲虛擬世界的規(guī)則、玩家角色的能力、其他角色和對(duì)象的能力、玩家的長(zhǎng)短期目標(biāo)。

游戲世界和游戲?qū)ο竽P?/b>

典型的游戲物件包括:

靜態(tài)的背景幾何圖形,如建筑物、路、地形(往往是某一特定類型)等

動(dòng)態(tài)剛體,如石頭、汽水瓶、椅子等

玩家控制的角色(PC)

非玩家控制的角色(non-player characters, NPC)

武器

投射物

車輛

燈光(可能出現(xiàn)在運(yùn)行時(shí)的動(dòng)態(tài)場(chǎng)景中,或者僅僅用于離線的靜態(tài)光照)

攝像機(jī)

關(guān)注這些問題:

你的游戲引擎是用面向?qū)ο蟮姆绞皆O(shè)計(jì)的嗎?

你會(huì)使用哪種語言?C? C++? Java? OCaml?

這些類的關(guān)系將如何組織?一個(gè)巨大的緊密集成的層次關(guān)系,還是一些松散的聯(lián)結(jié)的模塊?

你會(huì)使用模板和policy-base的設(shè)計(jì)嗎?或者傳統(tǒng)的多態(tài)?

對(duì)象怎么被引用?直接的指針?智能指針?句柄?

對(duì)象怎么被唯一的識(shí)別??jī)?nèi)存中的地址?名字?全局唯一的標(biāo)識(shí)號(hào)?(Golobal Unique Identifier, GUID).

游戲物件的生命周期如何管理?

游戲物件的狀態(tài)如何隨著時(shí)間模擬?

事件系統(tǒng)(Event System)

游戲?qū)ο笮枰推渌麑?duì)象通信。

腳本系統(tǒng)(Scripting System)

許多游戲引擎采用腳本語言以更加方便和快速的開發(fā)游戲特定的可玩性的規(guī)則和內(nèi)容。沒有腳本語言的話,每次對(duì)引擎中的邏輯或者數(shù)據(jù)結(jié)構(gòu)的改動(dòng),你必須重新編譯和鏈接你的游戲可執(zhí)行程序。但當(dāng)整合了一個(gè)腳本語言到引擎中的話,對(duì)游戲邏輯和數(shù)據(jù)的改動(dòng)只需要修改和重新讀取腳本代碼就可以了。有的引擎還可以讓游戲運(yùn)行時(shí)重新讀取腳本。有的引擎則需要在重新鏈接接腳本之前停止游戲。不管哪種情況,這個(gè)都比重新編譯鏈接游戲可執(zhí)行程序要快很多。

人工智能基礎(chǔ)模塊(Artificial Intelligence Foundations)

一般的AI一直是為個(gè)別游戲?qū)iT開發(fā)的軟件,不隸屬于游戲引擎,但最近游戲開發(fā)商找到每個(gè)AI系統(tǒng)的共有模式,是它的基礎(chǔ)部分漸漸進(jìn)入游戲引擎的范疇。

個(gè)別游戲?qū)S米酉到y(tǒng)(Game-Specific Subsystems)

在游戲性基礎(chǔ)層和其它低層引擎組件之上,游戲程序員和設(shè)計(jì)師合作實(shí)現(xiàn)游戲本身的特性。游戲性系統(tǒng)通常變化很大,并且根據(jù)開發(fā)的游戲而定制的。

工具及資產(chǎn)管道

游戲引擎需要讀取大量數(shù)據(jù),數(shù)據(jù)形式包括游戲資產(chǎn)、配置文件、腳本等。圖1.31描述了現(xiàn)代游戲引擎中用到的一些類型的數(shù)據(jù)。粗黑箭頭展示了數(shù)據(jù)是如何從創(chuàng)建它們的最原始的工具轉(zhuǎn)換到最終的游戲引擎中去的。細(xì)灰箭頭則表示了表示了這些各種各樣的資源如何關(guān)聯(lián)或者引用其它資源的。

數(shù)字內(nèi)容創(chuàng)建工具

游戲本質(zhì)上就是多媒體應(yīng)用。游戲引擎的輸入數(shù)據(jù)形式廣泛。所有這些源數(shù)據(jù)都需要由藝術(shù)家(artists)使用數(shù)字內(nèi)容創(chuàng)作(digital content creation DCC)應(yīng)用軟件制作。

資產(chǎn)調(diào)節(jié)管道

DCC程序所使用的數(shù)據(jù)格式極少有適合拿來直接在游戲中使用的。主要原因有兩個(gè):

DCC程序中模型在內(nèi)存中的數(shù)據(jù)往往比游戲所需要的復(fù)雜得多。

DCC程序的文件格式往往讀取速度太慢,并且有的還是一個(gè)封閉的私有的格式。

因此,DCC程序創(chuàng)建的數(shù)據(jù)一般導(dǎo)出為一個(gè)更標(biāo)準(zhǔn)的格式,或者用一個(gè)自定義的格式用于游戲。

數(shù)據(jù)從DCC程序中導(dǎo)出之后,有時(shí)必須再處理,才能在游戲引擎中使用。從DCC到游戲引擎的管道稱資產(chǎn)調(diào)節(jié)管道。每個(gè)游戲引擎都有某種形式上的資產(chǎn)調(diào)節(jié)管道。

3D模型/網(wǎng)格數(shù)據(jù)

在游戲中常見的幾何體一般由兩種類型的數(shù)據(jù)構(gòu)成。

筆刷幾何圖形(Brush Geometry)

筆刷幾何圖形是用一些凸包(convex hulls)集合定義的,每個(gè)凸包由多個(gè)平面定義。筆刷一般由游戲世界編輯器創(chuàng)建和編輯。

優(yōu)點(diǎn):

* 快速且易于創(chuàng)建

* 游戲策劃能存取 - 經(jīng)常用來設(shè)計(jì)用作游戲原型的關(guān)卡

* 能作為碰撞數(shù)據(jù)和渲染數(shù)據(jù)使用

缺點(diǎn):

* 低精度 - 難以創(chuàng)建復(fù)雜形體

* 不支持有關(guān)節(jié)的物體或者動(dòng)畫角色

3D模型(網(wǎng)格Mesh)

對(duì)細(xì)致場(chǎng)景元素,3D模型(也被稱為網(wǎng)格)優(yōu)于筆刷幾何圖形。網(wǎng)格是由三角形和頂點(diǎn)組成的復(fù)雜的圖形(網(wǎng)格也可能由四邊形或者其它可再分的幾何面(surface)構(gòu)成。

骨骼動(dòng)畫數(shù)據(jù)

骨骼網(wǎng)格(skeletal mesh)是一種特殊的網(wǎng)格,為關(guān)節(jié)動(dòng)畫而綁定到骨骼層次結(jié)構(gòu)之上。

游戲引擎需要3種數(shù)據(jù)去渲染骨骼網(wǎng)格。

網(wǎng)格本身?

骨骼層次結(jié)構(gòu)(skeletal hierarchy)(關(guān)節(jié)名稱,父子節(jié)點(diǎn)關(guān)系還有這個(gè)節(jié)點(diǎn)綁定到網(wǎng)格時(shí)的原始姿勢(shì))

一個(gè)或多個(gè)動(dòng)畫片斷(animation clips),用來指明隨著時(shí)間關(guān)節(jié)是如何運(yùn)動(dòng)的

音頻數(shù)據(jù)(Audio Data)

音頻片斷一般是由Sound Forge或者其它音頻創(chuàng)作工具導(dǎo)出的,有不同的格式和采樣率。音頻文件通常組織成音頻庫,以方便管理、容易載入及串流。

粒子系統(tǒng)數(shù)據(jù)(Particle Systems Data)

現(xiàn)代游戲使用非常復(fù)雜的粒子特效。粒子效果由視覺特效的專門設(shè)計(jì)師制作。許多游戲引擎有自制的的粒子效果編輯工具,只提供引擎支持的效果。

游戲世界數(shù)據(jù)和世界編輯器(Game World Data and the World Editor)

許多Radiant游戲引擎的變體被用于大多數(shù)游戲引擎,它基于Quake技術(shù)

半條命2(Half-Life 2)引擎提供一個(gè)叫做Hammer的世界編輯器

UnrealEd是UnrealEngine的世界編輯器。這個(gè)強(qiáng)大的工具還可以管理所有能被引擎接受的數(shù)據(jù)類型的數(shù)據(jù)。

一些構(gòu)建工具的方法(Some Approaches to Tool Architecture)

游戲引擎工具集(tool suite)可能以很多種方式來架構(gòu)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,171評(píng)論 3 119
  • 111. [動(dòng)畫系統(tǒng)]如何將其他類型的動(dòng)畫轉(zhuǎn)換成關(guān)鍵幀動(dòng)畫? 動(dòng)畫->點(diǎn)緩存->關(guān)鍵幀 112. [動(dòng)畫]Unit...
    胤醚貔貅閱讀 13,509評(píng)論 3 88
  • 在本系列Storyboard教程的第一部分,我們已經(jīng)學(xué)習(xí)了如何使用Interface Builder創(chuàng)建并連接不同...
    余一波_Bobby閱讀 13,295評(píng)論 2 11
  • 自2016年9月18日注冊(cè)簡(jiǎn)書賬號(hào)至今天,我已經(jīng)寫了,或者說是上傳了14萬多字。因?yàn)橛行┪恼率俏乙郧熬蛯懞昧说模瑵?rùn)...
    _荷包蛋_閱讀 385評(píng)論 7 8
  • 真的希望自己可以有脫胎換骨的改變。究竟變成一個(gè)什么樣子的人呢? 美麗大方,身材苗條,皮膚干凈,笑容溫暖,品味氣質(zhì)好...
    南小瓜瓜閱讀 209評(píng)論 0 0

友情鏈接更多精彩內(nèi)容