游戏引擎导论
本系列文章由zhmxy555(毛星云)編寫,轉(zhuǎn)載請注明出處。??
文章鏈接:?http://blog.csdn.net/zhmxy555/article/details/8250057
作者:毛星云(淺墨)????郵箱:?happylifemxy@163.com????
一、學(xué)完DirectX,我們該干什么?
?
?
淺墨覺得,歷代DirectX龍書的作者Frank Luna在龍書中忽視了非常重要的一方面內(nèi)容的講解,那就是就是學(xué)完了DirectX我們接著該做什么。
這大概是很多懷揣游戲開發(fā)夢想的熱血青年們曾經(jīng)思考過的問題。
?
淺墨也曾經(jīng)在這問題上迷茫過,也因?yàn)闆]人指明前路而走了不少彎路。
不過后來在黑暗中不斷地摸索,將荊棘變成坦途之后,終于摸索出了一條正確的道路。
也就是看完龍書《DIRECTX.9.0.3D游戲開發(fā)編程基礎(chǔ)》之后,我們需要如何學(xué)習(xí),來把學(xué)到的知識立體化,最終轉(zhuǎn)化為開發(fā)游戲的實(shí)際能力。首先我們需要再看一本書,《Real-Time Rendering》,也就是(RTR)實(shí)時渲染技術(shù),目前出到第三版了。(這本書并沒有中文版,大家如果要走游戲開發(fā)的道路,讀完龍書之后,剩下基本上都要靠讀英文書了。)
學(xué)完龍書,也可以選擇自己喜歡的游戲引擎來接觸并掌握了。看完龍書后淺墨首推學(xué)習(xí)Irrlicht,然后進(jìn)階推薦Ogre。兩者都是開源游戲引擎,都有著源代碼提供下載學(xué)習(xí),而且網(wǎng)上對這兩種引擎的研究熱情很高,資料豐富,引擎代碼字里行間都是哲思,掌握其中的代碼并納為己用,自己寫出像樣的游戲demo來是不成任何問題的。
?
?
下面,就開始看看我們這篇文章的主角——游戲引擎
?
?
?
二、站在巨人的肩膀上:游戲引擎導(dǎo)論
?
?
1.游戲引擎的起源和意義
?
上帝說,要有光,于是,就有了光。
曾經(jīng)有一段時期,游戲開發(fā)者關(guān)心的只是如何盡量多地開發(fā)出新的游戲并把它們推銷給玩家。盡管那時的游戲大多簡單粗糙,但每款游戲的平均開發(fā)周期也要達(dá)到8到10個月以上,這一方面是由于技術(shù)的原因,另一方面則是因?yàn)閹缀趺靠钣螒蚨家獜念^編寫代碼,造成了大量的重復(fù)勞動。漸漸地,一些有經(jīng)驗(yàn)的開發(fā)者摸索出了一條偷懶的方法,他們借用上一款類似題材的游戲中的部分代碼作為新游戲的基本框架,以節(jié)省開發(fā)時間和開發(fā)費(fèi)用。根據(jù)馬克思的生產(chǎn)力學(xué)說,單位產(chǎn)品的成本因生產(chǎn)力水平的提高而降低,自動化程度較高的手工業(yè)者最終將把那些生產(chǎn)力低下的手工業(yè)者淘汰出局,引擎的概念就是在這種機(jī)器化作業(yè)的背景下誕生的。
?
簡而言之,因?yàn)橄胗酶痰闹芷陂_發(fā)游戲,省掉重復(fù)編寫代碼的功夫,于是便有了游戲引擎。
?
首款的3D引擎誕生于1992年,3D Realms公司/Apogee公司發(fā)布了一款只有2兆多的小游戲——《德軍司令部》(Wolfenstein 3D)。之后這款游戲引申為Wolfenstein 3D游戲引擎,這也是史上首款3D引擎,它的作者是大名鼎鼎的約翰·卡馬克,這位id Software公司的首席程序師正是憑借這款Wolfenstein 3D引擎在游戲圈里站穩(wěn)了腳跟。
在此之后,游戲業(yè)界都受此啟發(fā),各式各樣的游戲引擎層出不窮。而各種游戲引擎的出現(xiàn),使得游戲開發(fā)并不需要從零開始,從而使得開發(fā)的周期大大縮短,也使開發(fā)成本大大降低。
?
游戲引擎崛起,游戲產(chǎn)業(yè)的黎明,就此降臨。
?
?
?
2.什么是游戲引擎
?
游戲引擎好比賽車的引擎,是用于控制所有游戲功能的主程序,從計算碰撞、物理加速系統(tǒng)和物體的相對位置,到接受玩家的輸入,以及按照正確的音量輸出聲音等等。無論是角色扮演游戲、即時策略游戲、冒險解謎游戲或是動作射擊游戲,哪怕是一個只有1兆的小游戲,都有這樣一段起控制作用的代碼。
這里我們丟出一個概念。游戲引擎是指一些已編譯好的可編輯電腦游戲系統(tǒng)或者一些交互式實(shí)時圖像應(yīng)用程序的核心組件。這些系統(tǒng)為游戲設(shè)計者提供各種編寫游戲所需的各種工具,其目的在于讓游戲設(shè)計者能容易和快速地做出一款游戲作品,而不是從零開始寫起,這樣大大縮短了開發(fā)的效率,開發(fā)的時間和開發(fā)的成本。
?
可以這樣說,游戲引擎讓我們站在巨人的肩膀上進(jìn)行游戲的開發(fā),而不是從零開始。
?
?
?
3.一款完善的游戲引擎的構(gòu)成
?
我們很大程度上將游戲引擎都理解為渲染引擎,分為2D圖形引擎和3D圖形引擎,其實(shí)游戲引擎并不單單指渲染引擎。渲染引擎只是一款完善的游戲引擎最重要的組成部分,而一款完善的引擎,還包含物理引擎,碰撞檢測引擎,音效引擎,腳本引擎,電腦動畫引擎,人工智能引擎,網(wǎng)絡(luò)引擎,場景管理引擎以及IO管理引擎等等。
其中,3D引擎的渲染系統(tǒng)通常建立在一套或者多套高級的圖形API之上,比如我們熟知的Direct3D與OpenGL。
?
?
4.DirectX與游戲引擎的區(qū)別
?
很多朋友在評論中提到不清楚DirectX與游戲引擎到底有何區(qū)別,在這里我們就來展開講一下,其實(shí)說起來非常簡單。
首先,DirectX是微軟旗下的一種應(yīng)用程序接口(API),它為各種品牌的硬件提供了一個共同的硬件驅(qū)動標(biāo)準(zhǔn),無論你是什么牌子的硬件,只要你遵循DirectX約定的準(zhǔn)則,用DirectX這套API開發(fā)出來的游戲就可以在你的硬件上很好的運(yùn)行。DirectX,我們可以理解為他為硬件驅(qū)動。而Direct3D,只是DirectX之中負(fù)責(zé)3D圖形渲染的一個組件而已。
?
游戲引擎是為了實(shí)現(xiàn)一款游戲雛形而編寫的一系列可重用的代碼,很多游戲引擎的渲染部分實(shí)現(xiàn)了對Direct3D的封裝。我們可以理解游戲引擎為一系列的軟件代碼,而我們利用游戲引擎中已經(jīng)現(xiàn)存的代碼,開發(fā)起游戲來就能事半功倍。
?
所以,綜合一下。
DirectX可以理解為硬件的驅(qū)動,它為各種品牌的硬件提供了一個共同的硬件驅(qū)動標(biāo)準(zhǔn)。
游戲引擎,是一系列構(gòu)成一款游戲的可重用的代碼,是用于控制所有游戲功能的主程序,游戲引擎的前身可為一款完整的游戲作品。
?
?
?
5.人氣開源游戲引擎介紹
?
想事半功倍地開發(fā)出屬于自己的游戲,在選擇游戲引擎上是必須要下足功夫的。
多半的游戲引擎都開源且免費(fèi)授權(quán)的,也就是說,如果我們采用某款開源游戲引擎開發(fā)出了自己的游戲,無需任何費(fèi)用,只要在我們的游戲作品中表示,使用了什么引擎來進(jìn)行游戲開發(fā)的就可以了。也就是我們經(jīng)常在很多游戲片頭會看到的logo。Power by XXX,比如Power by Ogre。下面我們就來介紹幾款目前比較火熱的開源游戲引擎,我們用他們進(jìn)行游戲開發(fā)是完全免費(fèi)的:
?
Ⅰ.Irrlicht Engine
Irrlicht Engine(鬼火引擎)始于2003年,次年即被評為最佳開源游戲引擎。它具有高性能的實(shí)時3D引擎,用C++編寫,也可用于.Net語言。拓展語言綁定包含java,perl,ruby,python.跨平臺支持,使用D3D,OpenGL以及自帶API. Irrlicht Engine可以在移動平臺Android以及iOS上使用。值得一提的是,鬼火引擎有專門的Andorid版。
其功能特點(diǎn)可以與商業(yè)3D引擎相比。優(yōu)點(diǎn)是容易掌握,好學(xué)。新手入門建議學(xué)習(xí)Irrlicht。
?
Ⅱ.Ogre
OGRE(面向?qū)ο蟮膱D形渲染引擎):OGRE是用C++編寫的,以現(xiàn)場為導(dǎo)向,靈活的三維引擎,它主要用于那些利用硬件加速的3D圖形應(yīng)用程序。它的類庫提取了所有基礎(chǔ)系統(tǒng)庫的細(xì)節(jié),如Direct3D和OpenGL?,并提供了一個基于世界對象和其他直觀類的界面。Ogre支持跨平臺,也就是說,Ogre理論上可以在Android以及iOS等移動平臺上使用,不過需要進(jìn)行相關(guān)的移植。
Ogre人如其名,完全采用面向?qū)ο蟮乃枷雭磉M(jìn)行設(shè)計,整體結(jié)構(gòu)顯得非常優(yōu)雅,宛如一件藝術(shù)品。在開源游戲引擎中,Ogre有著最華麗的渲染質(zhì)量,可以和大多數(shù)3D商業(yè)引擎的渲染效果一較高下。淺墨非常喜歡這款開源引擎,只可惜它僅僅是圖形引擎,而不是功能全面完整的游戲引擎。值得一提的是,?目前非常具人氣的ARPG游戲《火炬之光》系列就是采用的Ogre引擎。
這里我們貼一些2012年9月20日剛上市的《火炬之光2》的游戲美圖:
?
好了,看完絢麗的游戲截圖,下面我們繼續(xù)來學(xué)習(xí)。相信總有一天,我們也可以親手寫出這樣優(yōu)秀的游戲作品出來。
?
?Ⅲ.Delta3D
Delta3D:Delta3D是一個功能齊全的游戲引擎,可用于游戲,模擬或其他圖形應(yīng)用。其模塊化設(shè)計集成了其他的開源項目,如‘開放場景圖’,‘開放動力學(xué)引擎’,‘人物動畫庫’和‘OpenAL’?。Delta3D把這些開源項目集成到一個易于使用的應(yīng)用程序編程接口中。
?
?
Ⅳ.NeoEngine
NeoEngine:NeoEngine是一個全功能的用C++編寫的開源3D三維游戲引擎。該引擎是多平臺的,包括OpenGL和DirectX渲染功能,支持Windows,Linux和Mac OS X系統(tǒng),它提供了場景管理,頂點(diǎn)和像素著色,骨骼動畫和物理,腳本以及一個完全集成的工具鏈。
?
Ⅴ.Bullet
Bullet:Bullet是三維游戲多重物理庫,提供最先進(jìn)的碰撞檢測,柔軟身體和剛體動力學(xué)。這個游戲引擎被許多AAA級的游戲公司用在PS3?,Xbox 360?,任天堂的Wii、以及PC上?。這個庫可以免費(fèi)用于商業(yè)用途。
?
Ⅵ.Power Render
Power Render:Power Render是一個為游戲和3D圖形準(zhǔn)備的軟件開發(fā)工具包。它為開發(fā)者提供了一個API,為美工準(zhǔn)備了一些工具,這些工具可以實(shí)時預(yù)覽3ds Max、Maya和Lightwave的模型。新版本還可以預(yù)覽高動態(tài)范圍成像并支持OpenEXR文件格式。下載?Power Render 6?(35.1MB exe)。?
?
?
6.一些思考
?
很多朋友也會想到,既然都有了現(xiàn)成的游戲引擎為我們封裝好各類DirectX和OpenGL的庫函數(shù),甚至做出了各類可視化的設(shè)計工具,讓我們無需了解調(diào)用的細(xì)節(jié)就可以用這些工具來制作出自己的游戲,那我們是不是就不用去學(xué)習(xí)圖形API,也就是不用去學(xué)習(xí)Direct3D(或者OpenGL)了?
一千個人人眼中有一千個哈姆雷特。
如果你是本著快速開發(fā)一款游戲就完事交差的心態(tài),知其然不知其所以然,DirectX其實(shí)并不用去學(xué)習(xí),直接去學(xué)習(xí)一款好的游戲引擎的SDK就可以了。
如果你是本著學(xué)習(xí)求知的心態(tài),想要把游戲開發(fā)的各方面知識和細(xì)節(jié)做到心中有數(shù),甚至以后想自己寫一款游戲引擎,DirectX(或者OpenGL)是必須要學(xué)的。學(xué)完DirectX(或者OpenGL)之后,再來接觸一款游戲引擎,接觸它的源碼,我們就有資本看懂這些源碼的實(shí)現(xiàn)細(xì)節(jié),就可以很容易地把這款游戲引擎使用DirectX(或者OpenGL)進(jìn)行渲染的細(xì)節(jié)脈絡(luò)看得清清楚楚。經(jīng)常我們還涉及到了各種不同版本硬件渲染的支持問題,比如DirectX 8與DirectX9,這時候就會考驗(yàn)我們對圖像API的掌握情況。 同樣,掌握了DirectX(或者OpenGL)更利于我們對渲染的優(yōu)化。
?
?
?
?
?
7.市面上各類游戲引擎的列舉
?
最后,下面我們列舉出市面上存在的游戲引擎,點(diǎn)擊各個引擎的名字就可以跳到相應(yīng)的引擎官網(wǎng)地址了。
需要指出的是,這里的引擎有的只是圖形引擎,有的只是物理引擎,也就是說并不都像那些完善的商業(yè)引擎,比如虛幻3引擎(Unreal Engine3)一樣,具有完善而功能全面的物理引擎,碰撞檢測引擎,音效引擎,腳本引擎,電腦動畫引擎,人工智能引擎,網(wǎng)絡(luò)引擎,場景管理引擎以及IO管理引擎等等。
?
?
開源2D引擎:
?
- cocos2d
- d2d
- ika
- AGen
- gosu
- Mokoi Gaming
- LOVE
- Gosu
- PTK
- Thousand Parsec
- PPTactical Engine
- elf2d
- Daimonin MMORPG
- Blackthorn
- lastexpressengine
- tamy
- stardust
- ruge
- MAGE
- Edge Game Engine
- Orx
- chingu(Ruby)
- HGE
- FlatRedBall
- DxIce
- exgine(dephi)
- Entropia
- OSARE
- ProtoEngine(Javascript)
- mofe
- tonk(Python)
- Bismuth Engine
- retroremakes-framework
- scage(Scala)
- ArcLib
- tIDE
- flamingoengine(Python)
- Ethanon
- angel engine
- FIFE project
- Novashell
- Weaver(Linux)
- verge 3
- GTGE
- ArcEngine
?
?
?
開源3D游戲引擎
?
- Ogre
- Crystal Space
- Delta3D
- Irrlicht Engine
- CHAI 3D
- Cafu Engine
- ZFXCEngine
- Q3Viewer
- Drag[en]gine
- DUMB(Linux)
- DXQuake3
- Brume
- Open Toolkit
- RaydiumEn
- PySoy (Python)
- pygame(Python)
- BlendELF
- Ambrose3D
- AgateLib(.NET)
- D’Enfent Engine
- Asphyre Sphinx(Delphi)
- pyggel(Python)
- NeoEngine
- Horde3D
- ika
- Lightfeather
- syBR Engine
- SoftPixel Engine
- SED
- RomantiqueX(XNA)
- GLOBE_3D
- NeL Engine
- NewWorld3D
- M0TE
- MUD Designer(C#)
- Muli3D
- Linderdaum
- Lilith3D(Geo-Morphing)
- Entropia Engine
- SxDL
- APOCALYX 3D Engine
- Genesis3D
- QuakeForge
- NetGore (C#)
- Stratagus
- SDL
- PLIB
- ClanLib SDK
- GLFW
- Allegro
- 3DzzD
- Jad Engine (C#)
- Agar
- 6DX 3D Engine
- OSG
- Cube 2: Sauerbraten
- SCEngine
- vbGORE
- TNT Basic
- nebula3
- Sphere RPG engine.
- GhostEngine
- Hazy Mind(XNA)
- nagine3d
- mako engine
- aeon3d
- mcore3d
- tubras
- mgep
- Sylphis3D
- Yage
- XreaL
- Q 2.0
- Quesa
- Reactor3D(XNA)
- Metrolog Xg
- plush
- Lystra Engine
- LightFire(C#)
- LEAF2
- Lightning Engine
- jMeteor
- QBasic
- Lightspeed 3D(MacOS)
- Protea
- Original3D
- Purple#
- Cat Mother
- ExoEngine
- Poly Engine
- XEngine
- Xvizn
- Yake
- OpenSpace3D
- rgdengine
- ezrpg(PHP)
- glueengine(C#)
- G3DRuby
- netgore(C#)
- fosengine
- u-nebula
- renderengine(JavaScript)
- ltegameengine
- axonengine
- jgge
- Espresso3D
- RetinaX
- Reality Factory
- gmogre3d
- prequengine
- Epee Engine
- Axiom 3D Engine
- G3D
- OHRRPGCE
- Open Game Engine
- Baja Engine
- Blender
- Irmo
- Xith3D
- Soya 3D(Python)
- Panda3D
- Quake Engine3
- Quake Engine2
- Amaltheia
- Quake Engine
?
?
?
商業(yè)通用游戲引擎:
?
- Unreal ENGINE3
- CryENGINE3
- Gamebryo
- Vision Engine
- unity3d
- Source Engine
- Shiva 3D
- Unigine
- Torque 3D
- C4 Engine
- Truevision3D
- Demoniak3D
- CSP engine license
- Codecreatures
- Buzz 3D
- 3DSTATE
- Antiryad Gx
- Glacier
- Esperient Creator
- Lucid
- ludiloom
- Luxinia
- LawMaker
- GameStart
- Glint 3D ScriptENGINE
- Esenthel Engine
- GameCore
- Nowhere Engine
- S2Engine
- Quest3D
- Exocortex
- Frame Simulator
- Codecreatures
- worldaxis3d
- Xors3d
- VRcontext
- CPAL3D
- Ready At Dawn Engine
- Nytro Game Engine
- game start3d
- Visual3D Game Engine
- Vicious Cycle Software
- MetaVR
- Grualia Game Engine
- Gamestudio
- BlitzMax
- Cipher Game Engine
- Visual3D Game Engine
- Wild Pockets
- 3DVIA Virtools
- Vicious Engine
- VATAN ENGINE
- Cobra 3D engine(Cobra )
- Qube Software
- FreshEngine(PSP)
- Shark 3D
- eye-sys
- NeoAxis Game Engine
- DX Studio
- 3DVIA Virtools
- Agency9
- Abyssal Engine
?
?
商業(yè)MMO游戲引擎:
?
- Hero ENGINE
- Realm Crafter
- Zythum-Project
- Bigworld
- Chaos Game Engine
- Prime Engine
- Multiverse
?
?
?
Android 2D開源游戲引擎:
?
- AGE
- Angle
- cloak
- Cocos2D
- juicygames
- libgdx
- Rokon
- mages
- candroid engine
- andengine
?
Android商業(yè)游戲引擎:
- Roar Engine
?
Android 3D開源游戲引擎:
- catcake
- jPCT-AE
- kwaak3
- Gamine
- Alien3D
- forget3d
- Papaya
?
?
iPhone商業(yè)游戲引擎:
- airplaysdk
- PlaytoTv
- Kanji
- Shiva Ston3d
- iTGE
- Bork 3D
- Unity For iPhone
- GameSalad
- iXors3d
?
?iPhone開源引擎:
?
- galaxyengine
- gamekit
- Oolong
- SIO2
- chipmunk-physics
- card-surface
- Tec engine
?
關(guān)于游戲引擎的部分就講解完了,如果上面的列表有疏漏或者不準(zhǔn)確的地方,歡迎大家糾錯。
?
?
?
?
?
?
?
下面我們來回歸到目前的講解進(jìn)度中來,關(guān)于Direct3D的渲染流水線。
?
?
?
三, Direct3D渲染流水線的兩套體系
?
?
在Direct3D中,有兩套實(shí)現(xiàn)圖形渲染的方案,第一套為固定功能渲染流水線(fixed function render pipeline),另一套為可編程渲染流水線(programmable render pipeline)。
顧名思義,從字面上就可以看出這兩套方案的一些端倪出來。下面我們先來分別簡單介紹一下Direct3D中兩套渲染體系的特點(diǎn)和整體思路,給大家一個大體的概念。在介紹之前,有一個必須事先跟大家說清楚的實(shí)事,就是在DirectX 10以及DirectX11中,固定功能渲染流水線已經(jīng)被移除了,而可編程渲染流水線則得到了重用,這反映了一個明顯的趨勢。
目前,我們主要涉及到DirectX的有三個版本,有DirectX 9,DirectX 10以及DirectX 11。下面我們先分別介紹一下。
DirectX 9,一路走來,追捧者無數(shù),一手遮天,是目前PC游戲界的中流砥柱,占據(jù)著DirectX家族的絕大多數(shù)市場份額。
DirectX 10,這個悲劇的孩子由于搭載了坑爹的操作系統(tǒng)Windows Vista,生不逢時,注定了它此生的坎坷和懷才不遇。
DirectX 11,這位才華橫溢的孩子,在合適的時間出現(xiàn)在了合適的操作系統(tǒng)——Windows 7上,會在未來幾年內(nèi)取得不錯的成績。而在國內(nèi)的話,DirectX 11的普及,估計還得更久。
?
?
雖說在DirectX 10以及DirectX11中,固定功能渲染流水線已經(jīng)被移除了,但是在目前的主流DirectX 9里面,固定功能渲染流水線依然占有著舉足輕重的地位,我們只是會在后面的介紹中淡化它,但我們?nèi)匀恍枰莆账?#xff0c;以備不時之需。
最后我們來分別介紹一下這兩套Direct3D的渲染體系吧:
?
?
?
Ⅰ.固定功能流水線
?
第一套方案,固定功能渲染流水線(fixed function render pipeline)。
顧名思義,固定功能渲染流水線(fixed function render pipeline)從某種意義上來講是固定的(fixed)。它有著自己的一套準(zhǔn)則,關(guān)于光照,關(guān)于矩陣變換。要進(jìn)行一個完整而全面的渲染操作,基本上都是按以下步驟進(jìn)行的:填充頂點(diǎn)數(shù)據(jù),指定紋理坐標(biāo),設(shè)置材質(zhì),設(shè)置光照,設(shè)置變換矩陣,設(shè)置渲染狀態(tài),最終繪制圖形。這里先給大家一個步驟上的概念,后續(xù)文章中會詳細(xì)給大家介紹的。很多時候,我們只需要遵守著這套固定的準(zhǔn)則一步一步地進(jìn)行相關(guān)代碼的書寫,就完全可以駕馭這種渲染方法了。我們使用固定功能渲染流水線進(jìn)行畫面的渲染,說穿了就是根據(jù)我們的需要,不斷地通過Direct3D設(shè)備指針調(diào)用一些Direct3D中預(yù)設(shè)的函數(shù),比如用SetRenderState()設(shè)置各式各樣的渲染狀態(tài),SetSamplerState()設(shè)置各式各樣的采樣狀態(tài)等等。至于場景的處理和繪制的內(nèi)部過程我們無需插手,Direct3D的引擎會根據(jù)我們設(shè)置的各種渲染狀態(tài),自己來完成,非常的人性化。
由于這種渲染方案在新版的Direct3D中被移除,所以很多時候我們只需稍微了解,在后面,我們會淡化固定功能流水線的使用,而更多地對 “寫shader”進(jìn)行講解,也就是目前使用廣泛的可編程渲染流水線。
?
Ⅱ.可編程渲染流水線
?
最后,下面我們就來大概了解一下目前的渲染技術(shù)的趨勢——可編程渲染流水線。
?
而可編程渲染流水線(programmable render pipeline)就有著很大的不同了。通常我們說的自己寫shader就是指的這套渲染體系,這是目前3D編程的大趨勢。從字面意義上來說,它是可編程的,很靈活,而不是固定的。這樣我們就可以通過代碼的書寫,著手去實(shí)現(xiàn)那些在固定功能流水線中不太好實(shí)現(xiàn)的技術(shù)和效果,從而升華了我們的渲染技術(shù)。可編程渲染流水線中的核心,是著色器(shader)。而在Direct3D 9中,我們主要關(guān)注的是頂點(diǎn)著色器(vertex shader)和像素著色器(pixel shader)。也就是說,我們?yōu)橹骶帉懸恍┮?guī)模較小的代碼,然后在GPU上進(jìn)行編譯和運(yùn)行,這就是所謂的可編程渲染流水線的精髓。關(guān)于我們在可編程渲染流水線中使用的編程語言,是一種編譯和運(yùn)行在GPU(Graphic Processing Unit)圖形處理器之上的Direct3D中獨(dú)有的著色器編程語言——HLSL(High Level Shader Language)高級著色器語言。關(guān)于這種著色器編程語言,后面我們會詳細(xì)介紹。
?
?
關(guān)于后續(xù)的講解思路,我們會先大致了解固定渲染流水線,然后重點(diǎn)學(xué)習(xí)可編程渲染流水線,再者,就是選擇一個3D游戲引擎進(jìn)行系統(tǒng)學(xué)習(xí)了。
?
以上就是本節(jié)筆記的全部內(nèi)容,更多精彩內(nèi)容,且聽下回分解。
?
淺墨在這里,希望喜歡游戲開發(fā)系列文章的朋友們能留下你們的評論,每次淺墨登陸博客看到大家的留言的時候都會非常開心,感覺自己正在傳遞一種信仰,一種精神。
總結(jié)