• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            芳草春暉

            偶爾記錄自己思緒的地方...

             

            GameByro 特性分析(轉(zhuǎn))

            鏈接:http://www.shnenglu.com/rise-worlds/archive/2009/04/22/80691.aspx

            引言

            GameByro是一款成熟的商業(yè)引擎,已經(jīng)被許多成功的商業(yè)項目所使用,不僅包括文明4、上古卷軸4,輻射3等跨平臺知名單機(jī)游戲,還有EA的大型3DMMORPG戰(zhàn)錘online。GameByro完全基于面對對象設(shè)計,結(jié)構(gòu)清晰,便于使用和擴(kuò)展。靈活的可編程渲染架構(gòu)使它比較容易支持最新的圖形技術(shù)。另一方面,由于強(qiáng)調(diào)通用性,GameByro并沒有對上層應(yīng)用做太多的支持,其工具和插件大多僅具有一些通用功能,所以它更像是一個游戲開發(fā)套件而不是一個完整的FrameWork。

            引擎特性概覽:

            · 跨平臺(PC,XBOX360,PS3)

            · 場景圖表現(xiàn)為層次化的結(jié)構(gòu)

            · 同目前主要的建模工具集成(插件支持)

            · 高效的可視性裁剪

            · 在所有的平臺上支持高級3D硬件加速

            · 高級紋理和著色效果

            · 動態(tài)碰撞檢測

            · 細(xì)節(jié)分級表現(xiàn)(LOD)

            · 靈活的渲染,排序和裁剪算法

            對象系統(tǒng)

            GameByro的對象系統(tǒng)的使用遍及整個引擎,其主要實現(xiàn)如對象管理,引用計數(shù),對象生存期等功能。可以通過對幾個基類的繼承來使用對象系。

            其主要特性主要有:

            1. 智能指針(引用計數(shù))

            2. 運行時類識別(RTTI)

            3. 場景對象復(fù)制

            4. 序列化(對象文檔化)

            5. 對象命名

            6. 對象擴(kuò)展數(shù)據(jù)的管理

            7. 定時器(主要用于動畫)

            8. 多線程操作

            驅(qū)動層

            GameByro對圖形接口進(jìn)行了封裝,將圖形API從引擎的渲染系統(tǒng)中剝離出來,在PC系統(tǒng)上,GameByro同時支持DX9和DX10兩種接口。

            DX9渲染器特性

            l GameByro不允許多個DX9Renderer對象同時存在,且不能與DX10Renderer共存。但在同一幀內(nèi),GameByro的DX9Renderer可以同時渲染多個窗口。

            l GameByro的DX9渲染器支持對資源的多線程訪問,同時也支持對資源的預(yù)載,但是多線程的操作仍然受到嚴(yán)格的限制。

            l DX9Renderer 的固定管線蒙皮操作最少支持4塊骨骼(矩陣),同時基于shader的蒙皮操作支持30塊骨骼。

            l DX9Renderer通過對后臺緩沖的多重采樣支持全屏抗鋸齒,范圍在2倍到4倍之間。

            l 大多數(shù)硬件在DX9下對幾何體的一個單一的piece所能接受的光照數(shù)量都有一定的限制(指渲染的一個批),如果超過這個限制,GameByro會根據(jù)距離或者是影響因子放棄一些光照。正因如此,在應(yīng)用程序中,當(dāng)8個以上的逐頂點光照作用于同一對象時,就會有一些被拋棄。

            l DX9Renderer提供了視口的左右反向功能,用于實現(xiàn)后視鏡、立方體貼圖表面繪制等功能。

            l DX9Renderer支持頂點霧,可以通過相關(guān)接口設(shè)置霧的最大值。

            l DX9Renderer完全支持DX的紋理格式。應(yīng)用程序可以將自己的Direct3D textures提供給GameByro,引擎會自動將其封裝到自己的材質(zhì)對象中并允許添加屬性和特效。通過提供自己的DX的紋理格式,GameByro能夠正確的使用自并非天然支持的紋理格式。

            l 紋理相關(guān)特性和限制:DX9Renderer需要顯卡支持在同一pass中至少使用兩個紋理,否則渲染器則不會創(chuàng)建成功。此外受限于硬件的功能還有:

            1. Cube Mapping(立方體紋理)

            2. Specular Bump Mapping(凹凸鏡面貼圖)

            3. Diffuse Bump Mapping(凹凸反射貼圖)

            4. Non-Power-of-Two Texture Size(編長非二整數(shù)冪的紋理):使用這種紋理有如下限制:紋理尋址模式必須設(shè)置為clamp,Mipmapping不能使用。

            5. Texture Downsizing(紋理精度縮減)

            6. Texture Compression(壓縮紋理),DX9Renderer支持載入經(jīng)過壓縮的紋理格式,并提供了紋理即時壓縮的功能。如果硬件支持壓縮紋理,DX9Renderer可以將經(jīng)過壓縮的紋理數(shù)據(jù)直接交給硬件處理,否則DX9Renderer會自動將數(shù)據(jù)解壓后再交給硬件。

            7. Texture Apply Modes Supported:DX9Renderer不支持APPLY_DECAL紋理應(yīng)用模式。

            8. Texture Format Requests(紋理格式要求):精確的紋理像素映射依賴于目標(biāo)硬件和顯示器像素位寬。

            9. Palettized Texture Formats(調(diào)色板紋理格式的支持)。

            10. Sphere Mapping(球面映射):GameByro中所有的渲染器都支持世界空間中的球面映射。

            11. DX9Renderer支持加載包括DDS、TGA、BMP格式的文件。Cube textures和volume textures都能被正確的加載,但是只能通過三維坐標(biāo)尋址。

            12. GameByro的編輯器支持導(dǎo)出DX原格式的紋理,并在加載的時候不進(jìn)行格式轉(zhuǎn)換。將DX格式的紋理直接交給DX處理。

            引擎渲染系統(tǒng)分析

            GameByro的渲染是由幀渲染系統(tǒng)(Frame Rendering System) 控制的,幀渲染系統(tǒng)封裝了每一個批次的繪制過程,這樣可以方便的控制整個渲染流程。

            陰影系統(tǒng):

            GameByro的陰影系統(tǒng)是使用幀渲染系統(tǒng)的典范,通過對已有的類以繼承的方式進(jìn)行功能擴(kuò)展,實現(xiàn)了靈活的陰影渲染功能。GameByro自身支持三種光源的陰影圖生成,分別為點光源(全方向光)、平行光、聚光燈。

            陰影系統(tǒng)統(tǒng)一由一個管理器負(fù)責(zé)控制。陰影的算法被封裝成了一個個類對象中。系統(tǒng)中同時存在著幾種陰影技術(shù),即可以選擇使用,也可以同時使用幾種陰影技術(shù)作用于同一幾何體。陰影系統(tǒng)會自動裁剪掉那些沒有陰影接受體的光源,同時在計算每個光源所產(chǎn)生的陰影時,會裁剪掉那些不受此光源影響的幾何體,達(dá)到性能優(yōu)化的目的。用戶很容易對陰影系統(tǒng)進(jìn)行擴(kuò)展,實現(xiàn)自己的陰影算法。

            GameByro的陰影主要是基于shadowMap技術(shù),點光源使用了立方體陰影圖,軟陰影則使用了方差陰影圖技術(shù)(VSM)。

            GameByro的陰影系統(tǒng)集成到了場景編輯器中,可以在編輯器中直接為光源指定陰影效果,所見即所得,提高了開發(fā)效率。

            clip_image002

            (如圖所示,在編輯器中同時使用點光源陰影和方向光產(chǎn)生的軟陰影)

            地形系統(tǒng):

            GameByro的terrain是簡單易用的,并且方便為其擴(kuò)展,用以滿足項目的其他功能需求。

            地形系統(tǒng)由以下幾部分組成:

            clip_image004

            1. NiTerrainComponent:是整個地形系統(tǒng)的入口,通過Terrain Interactor可以像訪問容器一樣訪問NiTerrainComponent所有的sub-component。

            2. Terrain Interactor 地形迭代器,通過Terrain Interactor可以啟動所有的數(shù)據(jù)查詢,比如簡單的碰撞檢測,meta-data查詢,高度圖導(dǎo)入和文件加載。幾乎所有基于terrain系統(tǒng)的操作都是通過Terrain Interactor完成的。

            3. NiTerrainSectorComponent 的內(nèi)部主要包含一個負(fù)責(zé)組織地形數(shù)據(jù)塊的四叉樹。此對象負(fù)責(zé)從磁盤加載執(zhí)行物體與地形的射線相交查詢,轉(zhuǎn)換地形幾何體,管理內(nèi)部資源(包括共享的頂點流和shader)。同時NiTerrainSectorComponent還負(fù)責(zé)進(jìn)行四叉樹的遮擋查詢和生成可見集。

            4. Data Leaves and Blocks 四叉樹的切分等級是通過NiTerrainComponent設(shè)置的,四叉樹的每個節(jié)點都包含一個地形塊,塊的邊長必須是2的整數(shù)冪。四叉樹的根節(jié)點等級為N,葉節(jié)點為0,由高到底細(xì)節(jié)依次增加,等級為0的葉節(jié)點所包含的地形塊擁有最高的細(xì)節(jié)。

            clip_image006

            5. Material Layers:地形系統(tǒng)通過掩碼圖來為地形指定材質(zhì)。掩碼的數(shù)據(jù)指定了地表的每個部分所對應(yīng)的材質(zhì)。同一地表最多支持四種材質(zhì),根據(jù)各自的權(quán)重進(jìn)行混合,權(quán)重數(shù)據(jù)也是通過掩碼來獲得。

            材質(zhì)在地形的渲染系統(tǒng)中扮演著很特殊的角色,可以通過對材質(zhì)指定meta-data來附載其他的信息(比如在雪地行走的聲音),同時也可以通過對材質(zhì)的紋理貼圖為地表增加頂點或像素著色程序。此外每種材質(zhì)可以包含如下指定類型的紋理貼圖:

            l Diffuse/Base Map 反射貼圖,通過3或4個通道決定反射光的顏色。

            l Detail Map 細(xì)節(jié)貼圖,為反射貼圖提供Alpha值。

            l Normal Map 法線貼圖。

            l Parallax Map 視差貼圖,用來保存表面像素的高度偏移信息。

            此外GameByro還提供了簡單的地形射線追蹤和水面渲染。地形射線追蹤目前的實現(xiàn)很簡單,就是用一個射線查詢地表的三角形,以后會與Physics進(jìn)行集成,支持通過物理引擎l實現(xiàn)物體與地表的碰撞檢測。水面渲染主要是用兩張紋理動畫混合而成,通過凹凸貼圖來表現(xiàn)水波。引擎為水面所在的地表生成一個灰度圖,保存地表距離水面的高度。這里預(yù)先定義了兩種顏色,深水顏色和淺水顏色,如果水面以下沒有地表就直接使用深水顏色。再像素著色器中可以對高度圖進(jìn)行采樣,從而得出當(dāng)前像素的水深,然后根據(jù)這個深度在深色和淺色之間進(jìn)行差值,得到最終水的顏色。不過這個效果并不是很理想,如需更好的效果,還需要對其進(jìn)行擴(kuò)展,比如說,增加反射和折射等。

            clip_image008

            材質(zhì)

            GameByro的材質(zhì)主要是通過3DMAX的插件進(jìn)行編輯的,并提供了標(biāo)準(zhǔn)的材質(zhì)節(jié)點。

            (在GameByro中,材質(zhì)節(jié)點的主要作用是負(fù)責(zé)根據(jù)著色過程生成相應(yīng)的shader代碼)這個節(jié)點一共有9個通道,并提供了大量可供調(diào)整的參數(shù),這樣就可以讓美術(shù)方便的使用逐像素光照、視差貼圖、環(huán)境體貼圖這些效果,在游戲中,GameByro通過不同的材質(zhì)屬性和不同的光照環(huán)境編譯出不同的shader代碼,以二進(jìn)制的形式保存在磁盤上,下次啟動時載入內(nèi)存,這樣就不用重復(fù)編譯,但在第一次進(jìn)入游戲中時會有些延遲。靈活強(qiáng)大的材質(zhì)是次世代引擎的重要特征,GameByro在這方面做到了靈活,但是美術(shù)仍然不能通過可視化工具控制材質(zhì)的處理過程,只能編輯資源和修改參數(shù),編輯性還不夠強(qiáng)大。

            Shader

            GameByro提供了一個極具擴(kuò)展性的shader系統(tǒng),并將它與藝術(shù)創(chuàng)作工具緊密結(jié)合。GameByro定義了自己的shader格式,基于文本的.NSF文件和基于二進(jìn)制的.NSB文件,.NSF文件編譯后生成.NSB文件,這個過程即可以在開發(fā)時完成,也可以在運行時進(jìn)行。 .NSF文件使用的是GameByro自定義的語法,并使用自己的語法分析器將其編譯成相關(guān)平臺的代碼。實際上,GameByro的shader系統(tǒng)在應(yīng)用程序和GPU程序之間做了一層封裝,屏蔽了不同平臺之間的差異,使得應(yīng)用程序可以用相同的接口來與GPU之間進(jìn)行交互,而GPU程序最終還是通過cg或hlsl來實現(xiàn)的,這樣做的好處是,當(dāng)平臺發(fā)生改變時,只需要根據(jù)具體的平臺來編寫相應(yīng)的shader程序,而不需要去修改應(yīng)用程序。當(dāng)然,shader系統(tǒng)也直接支持cg和hlsl格式的文件,使用方法同NSF、NSB文件相似。GameByro的Shader系統(tǒng)提供了一套完整的查錯機(jī)制,方便使用者對程序進(jìn)行debug。

            GameByro的shader系統(tǒng)集成到了所有的配套開發(fā)工具中,這樣就實現(xiàn)了所見即所得,美術(shù)在工具中就可以直接看到資源在游戲中的效果,從而提高了開發(fā)效率。

            GameByro通過引入自己的shader文件格式為跨平臺提供了方便,同時也增加了系統(tǒng)的復(fù)雜性,使用起來稍微有點繁瑣,開發(fā)人員又不得不去熟悉它的語法,如果開發(fā)中不考慮跨平臺的話,想要自己開發(fā)特效,也可以不使用NSF文件,直接使用fx格式的文件。

            引擎自帶的特殊材質(zhì)

            AdditiveLightMapsMaterial(附加光照圖材質(zhì),使用額外的光照圖紋理來混合當(dāng)前場景光照計算的結(jié)果。下面的插圖是使用投射光照圖紋理的渲染效果。)

            clip_image010

            AlphaTextureBlender(紋理Alpha混合)

            clip_image012

            Aniso(各向異性光照,左下的飛機(jī))、Halo(光暈效果。上面的飛機(jī))

            clip_image014

            ASMSkinningLighting(參與光照計算的骨骼動畫蒙皮)

            ASMSkinningNoLighting(不參與光照計算的骨骼動畫蒙皮,效率經(jīng)過了優(yōu)化)

            BaseBumpWithSpatialGlow(帶有輝光效果的凹凸貼圖)

            clip_image016

            Chrome(金屬外表,使用基本紋理、漫反射cube map、鏡面反射cube map、法線貼圖等效果實現(xiàn)類似于金屬表面的光澤和質(zhì)感,并支持基于此效果的蒙皮操作)

            clip_image018

            Colorize(使用一個自定義的屬性來動態(tài)的設(shè)置或者修改顏色)

            clip_image020

            FXSkinning and HLSLSkinning(使用可編程渲染管線進(jìn)行骨骼動畫的蒙皮)

            GeneralGlow(普通輝光效果)

            GeneralDiffuseSpecularGlow(普通鏡面反射高光輝光)

            clip_image022

            GeneralDiffuseSpecular(普通鏡面反射高光,支持蒙皮操作)

            clip_image024

            Dot3BumpMap(凹凸貼圖,右圖為蒙皮效果)

            clip_image026

            Glass (玻璃效果)

            clip_image028

            OilyFilm(油狀薄膜)

            clip_image030

            LuminanceTransfer(類似于熱源偵測儀的效果)

            clip_image032

            Outlining(藍(lán)圖或草圖)

            clip_image034

            ParallaxMapping(視差貼圖,下面右圖是使用了ParallaxMapping的效果)

            clip_image036

            PerPixelLighting(逐像素光照,同時支持固定管線和可編程渲染管線)

            clip_image038

            SkinnedToonShadingWithOutline(卡通渲染,支持骨骼蒙皮、描邊)

            clip_image040

            紋理

            GameByro的紋理系統(tǒng)支持多重紋理、投射紋理、動態(tài)紋理、特效紋理,并且使用紋理的一些高級特性是平臺無關(guān)的。當(dāng)然GameByro中紋理的功能仍然受限于硬件特征。主要特性和限制見渲染器。

            工具及插件:

            GameByro提供了場景編輯器,資源瀏覽器,資源的物理模型瀏覽器、動畫編輯工具,字體創(chuàng)建工具,以及3DMAX、MAYA插件,材質(zhì)編輯是在插件中進(jìn)行的,這套工具包含了完整的3D資源開發(fā)流程。

            物理系統(tǒng)

            GameByro通過PhysX提供物理仿真模擬,只需幾行簡單的代碼就可以將GameByro的場景和PhysX建立起聯(lián)系,不過需要在顯式的調(diào)用相關(guān)接口來進(jìn)行物理仿真對象和場景對象間的同步,即將物理仿真的結(jié)果作用于場景中的對象。同時,還可以通過參數(shù)來決定是否需要等待物理仿真運算的結(jié)果。這就保證了一定的靈活性,例如,用戶可以不對靜態(tài)物體進(jìn)行同步,達(dá)到優(yōu)化的目的。還可以通過把更新的接口放在下一次循環(huán)開始的時候調(diào)用,這樣可以減少由于等待物體仿真模擬造成線程的阻塞,充分的利用了CPU資源。

            粒子系統(tǒng)

            GameByro的粒子系統(tǒng)為3ds max 和 Maya等粒子生成工具提供了完整的插件系統(tǒng),并完全支持軟粒子,即粒子會受到力的影響。

            clip_image042

            流處理引擎

            GameByro實現(xiàn)了一個完全跨平臺的流處理引擎。使用者可以方便的利用它完成多線程任務(wù),如資源的加載等,完全發(fā)揮多處理器平臺的威力,而不用關(guān)注底層細(xì)節(jié)。

            效率分析:

            為了對GameByro進(jìn)行全面的評估,筆者試著對GameByro的渲染效率進(jìn)行了簡單的測試,本人的機(jī)器配置如下:

            l CPU:E2180

            l GPU:2400PRO

            l 內(nèi)存:2GB

            基本可以代表當(dāng)前中低端玩家的配置。

            場景一

            下圖為一個大的室外地形場景,包括建筑物、水面,地表使用了法線貼圖,除了植被以外,基本包含MMORPG的大部分室外場景要素。最后測試的結(jié)果平均幀數(shù)為21幀。幀數(shù)偏低的原因是整個場景使用了逐像素光照,同時沒有采用LOD進(jìn)行優(yōu)化。

            clip_image044

            場景二

            如圖所示場景中有100個角色在做不同的動畫,每個角色有51個骨骼,整個場景共有287900個多邊形和556600個頂點,并且場景中有一個點光源和平行光源,在沒有陰影的情況下幀數(shù)大約在27~28幀左右。這些骨骼動畫使用了GameByro提供的骨骼動畫優(yōu)化方法,性能有一定提升。

            clip_image046

            由以上結(jié)果可以看出,GameByro的骨骼動畫渲染效率尚可,而室外地形渲染系統(tǒng)的性能稍顯不足,再沒有角色和植被的情況下,僅能達(dá)到22幀左右,如果在實際的游戲環(huán)境還要算上其他游戲系統(tǒng)(網(wǎng)絡(luò)、邏輯、UI等)的性能消耗,這是不足以讓玩家流暢進(jìn)行游戲的,還需進(jìn)一步手動的優(yōu)化。

            總結(jié)

            GameByro擁有一套靈活的架構(gòu),便于使用和擴(kuò)展,易于上手;配套的開發(fā)工具比較齊全,擁有完整的美術(shù)開發(fā)流程;完全支持跨平臺,便于游戲的移植;同時由于為了保證靈活性,在設(shè)計上面比較偏重于功能和擴(kuò)展,而不是性能。

            高度的可定制性帶來的是較低的整合,GameByro沒有提供游戲框架,地圖編輯器也僅僅實現(xiàn)了最通用的功能,即地表和物件的擺放。這就說明,如果要使用GameByro開發(fā)產(chǎn)品,就需要自己整合GameByro,并對其進(jìn)行一定的修改和擴(kuò)展。這也是它與UnrealEngine3區(qū)別最大的地方。

             

            作者:葉起漣漪

            posted on 2010-04-19 22:29 CrazyDev 閱讀(667) 評論(0)  編輯 收藏 引用 所屬分類: 游戲引擎

            導(dǎo)航

            統(tǒng)計

            常用鏈接

            留言簿(1)

            隨筆檔案

            文章分類

            文章檔案

            C/C++

            CEGUI

            Friend Bog

            Game Industry

            Lua

            OGRE

            Other

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            99热都是精品久久久久久| 99麻豆久久久国产精品免费| 91久久香蕉国产熟女线看| 99国内精品久久久久久久| 久久乐国产精品亚洲综合| 亚洲午夜久久久影院伊人| 亚洲AV乱码久久精品蜜桃| 久久九九全国免费| 国产A级毛片久久久精品毛片| 91精品国产9l久久久久| 久久久久久久国产免费看| 久久午夜羞羞影院免费观看| 久久久久国色AV免费观看| 韩国免费A级毛片久久| 久久中文字幕精品| 国产L精品国产亚洲区久久| 亚洲午夜久久久影院伊人| 久久精品国产亚洲Aⅴ香蕉| 久久香综合精品久久伊人| 无夜精品久久久久久| 青青青伊人色综合久久| 亚洲中文字幕无码一久久区| 亚洲а∨天堂久久精品| 91精品国产综合久久四虎久久无码一级 | 久久WWW免费人成—看片| 亚洲愉拍99热成人精品热久久| 久久er国产精品免费观看8| 久久综合综合久久狠狠狠97色88 | 亚洲v国产v天堂a无码久久| 亚洲国产精品久久久久婷婷软件 | 国产精品久久久久天天影视| 亚洲愉拍99热成人精品热久久| 亚洲国产成人精品无码久久久久久综合| 国产精品久久99| 国产亚洲精品美女久久久| 一本色综合网久久| 亚洲色婷婷综合久久| 人妻无码久久一区二区三区免费| 波多野结衣AV无码久久一区| 亚洲女久久久噜噜噜熟女| 亚洲AV无码久久|