想學習遊戲引擎架構用哪個開源引擎好?

已經讀了一遍《遊戲引擎架構》,準備對照實際引擎學習,以前曾用LibGDX,Unity寫過小遊戲。

據我現在了解klayge基本是大神一個人的作品,總是追尋新的技術,可能算是實驗性質吧。代碼質量應該是有保證的,代碼量也比較小,(猜的,畢竟一個人)。

OGRE實際項目比較多,代碼量相比klayge也比較大吧,看知乎的評論其代碼結構上有點過度設計?

Cocos2D-X應用廣泛,項目多,似乎看這個經濟價值更高,社區也更活躍,問題容易解答。

Unreal4也開源了,可是用來學習估計太龐大了...

幾年前似乎只有ORGE可選,現在各位大神覺得從哪個比較適合學習呢?


看題主的提問和經歷,猜測應該算是新手入門級別。

如果是在一開始奔著研究學習而不是工作使用的話,建議是從一些比較小的引擎開始,這樣可以比較快的理清各個模塊的脈絡。

我說的是一些,而不是一個,這樣你有對比的去各個引擎的架構不同,才能更好的理解引擎架構的設計。

Cocos2dx雖然Bug很多,但也勝在夠簡單,不推薦深入研究,但也可以一看知道有這麼回事。

我記得也有一個WildMagic的,結構也很清晰。

KlayGE渲染部分是很牛,不過畢竟個人精力有限,在工作流上不足,研究最新技術的推薦一看,不過對題主來說還有點太早。

Orge印象中已經有點偏古老了,不過結構確實很清晰。

Unreal,確實非常非常牛,工作流也非常完善,不過確實也非常龐大,一開始看的話非常容易陷進去找不著北,被各種生成代碼和宏搞得暈頭轉向,你要是對自己的C++和圖形學非常有自信的話,可以研究。我目前也正在用UE做VR遊戲,也正在研究UE,若是有興趣,也可以順便看看我的專欄InsideUE4(InsideUE4 - 知乎專欄)

我自己也曾經有空自研一個引擎,一邊學習一邊自己造一個輪子,最初也只是面向手游的,目前只有2D部分,跟那些知名的完全沒法比。不過好壞順便也可以一看: GitHub - fjz13/Medusa: Cross mobile platform 2D3D C++ game engine.

想研究引擎架構,就多看一些引擎,別只盯著一個。

想研究圖形學,就好好看圖形學的書,然後自己做實驗。


最近正在寫引擎相關的代碼(我不是引擎部門的,就是特別喜歡引擎,也是我未來的發展方向)。以下兩張圖,第一張是類似OGRE的,相似度百分之八十吧,第二張是Unreal 4 的,目前只畫了百分十三十。

我開始寫一個引擎的時候,不知道該怎麼下手。書上講的再好,可打開IDE都不知道第一個class該寫誰。糾結了兩周,索性就開始抄吧。手邊只有上大學時候配好的OGRE,版本是1.72。邊抄邊畫類圖,只是抄個框架。從去年五月開始,晚上抄,周末抄,放假也還在抄,到年底,能渲染出那個OGRE的Logo頭像,總算完事兒了。最大的感觸就是,過年回家還是單身,都不大敢見人了。

過年回來,有小半年的時間生活迷茫,沒怎麼寫。

前兩個月又開始,目標是到年底,保持整個框架不變的情況下,使用OpenGL4.3,將底層改為延遲渲染,加延遲光照,基於物理的渲染,PSM,點光源的ShadowMap,SSAO以及基於Reflective Shadow Map全局光照,還不太清楚選哪一種。目前在實現PSM,估計下周完成。

Unreal是工作中使用的開發引擎,自己平時邊看邊畫,結果就出來這麼一張圖。最近工作上需要看看底層的代碼,花一周把Unreal的光照渲染流程大致過了一遍。感覺就是,不懂得時候覺得牛,懂了,覺得牛的有道理。

說點兒感受:

1.沒有圖形學基礎,不管是OGRE還是Unreal的渲染部分,想看懂都是扯淡。

2.如果不打算看渲染部分,那麼OGRE不適合,他就是一個渲染引擎。引擎的其他模塊不了解,只能臆測一下。Unreal太龐大,了解完Unreal 編輯器各種功能(不是引擎,僅僅是編輯器)就要三個月左右。不跟實際項目,實際可能更長。雖然各種文檔也很完備(Unreal官方文檔乾脆改名叫 如何使用Editor得了),但是這些文檔都是蜻蜓點水的提到很表層的類,具體這麼大一堆類如何協作的,並沒有什麼文檔。即使你在相應模塊有很深功,看起來也很吃力。同時,Unreal對C++做了很多魔改,雖然驚艷,但是想要明白,也是個出力點。

3.個人感覺OGRE延遲渲染版本和Unreal的渲染流程相似,渲染框架差別很大。個人想法是,框架是為了合理的使用流程而搭建的,當這個流程你懂了,才能了解框架是怎麼來的,看起來也就異常的簡單。

綜上,我建議從OGRE入手,至於跟我一樣喪心病狂的抄一遍,還是單步調試走一遍,個人愛好而已。看完後,在看Unreal的渲染框架就覺得很順利。Unreal渲染框架對C++魔改的地方並不多,看著還比較順利。

至於OGRE和Unreal誰的設計更好,我覺得,對於沒寫過的人來說,考慮這個問題有點兒早了,即使一幫大牛討論的再有道理,你聽不懂,也插不上嘴。能聽懂的,都至少能隨手寫個引擎出來,最不濟也能畫張UML圖(手動微笑)。

OGRE不可能一無是處,Unreal也不是萬能鑰匙。選個能駕馭的了的,然後騎驢找馬,不論哪個都比走路強。


閑來無事偶爾看到這篇主題,然後看到了Chaos的回答,立馬火冒三丈。在知乎我幾乎不回貼,偶爾瀏覽,不過這次實在忍不住要罵人。這麼腦殘的回答,還有一把人支持,我只能說國內科研風氣之差,可見一斑。目測Chaos可能是個大神偶像級人物,後來有人告訴我他是網易端游手游的引擎的開發者,然而,那又如何?我瞬間想起最近火遍朋友圈的恆大許家印帶領高管隊以一分的優勢贏了員工隊的笑話。

本人不才,搞圖形圖像十多年,早期從OGRE入門,一直用OGRE開發項目,後來偶爾用過U3d, 現在常用UE。各種3d渲染幾乎都自己從頭實現過一遍,例如延遲渲染,SSAO,各種光照,反射,水面,體積光,軟陰影,陰影邊緣柔化……現在主要從事VR方面的開發,應該對這個話題還是有點發言權的。不開啟嘴炮模式,先說一下Chaos的回答有多麼的不靠譜。

1、強烈推薦UE。這裡,我不否認UE是一個優秀的引擎,但是,不要說剛入門的題主,就算是做圖形學三年左右的人,99%都不會能看懂UE。很簡單,UE的結構龐大,設計複雜,絕對不是一句輕描淡寫的「如果你看不明白,如果你有弄不懂的,有想不通的,慢慢來。」就能解決的。90%以上的3d程序員的天賦,窮一生也不會能看懂UE的源碼。當然了,你也可以說我危言聳聽,看不起程序員。估計你在高大上的網易待慣了,不會知道這個行業千千萬萬的圖形程序員可能是連個簡單的shader都不會寫的介面程序員。其次,UE那些複雜的宏定義嵌套,真的是好嗎?真的那麼容易看懂嗎?UE的源碼很多是生成源碼,很多程序員估計連生成源碼都不知道是怎麼回事,生成源碼有什麼好處也不知道,你真的覺得UE適合入門學3d嗎?可能對你而言是適合的,但是你這個回答完全是誤人子弟。

2、」Ogre是個失敗的作品,是一堆半專業隊業餘從事的零散產品,架構混亂,要改成成品需要花很大的力氣。「對於這句話,我只認同最後一句,需要改成產品需要花很大的力氣。前面的,我完全不敢苟同。先說產品,不知道國內高大上的網易,出過哪一款碾壓火炬之光的產品了嗎?還是網易自信到可以碾壓火炬之光的團隊了,但是生不逢時,所以出不來好產品?對了,列舉產品還要看看年代,你總不好意思拿現在的產品來碾壓十年前的產品是不是?我孤陋寡聞,真不知道網易除了半桶水的天下系列,還有什麼很牛逼的體現出來牛逼引擎的3d遊戲。再說代碼質量,開源的引擎我看過很多,鬼火是入門級的超級簡單的引擎,OSG是還不錯的引擎,不過不大適合遊戲。龔敏敏的作品代碼質量還是可以的,不過人力有限,功能較少。由於我本人用OGRE最多,當然是更喜歡OGRE的架構和代碼。以我二十年的代碼經歷,噴別人的代碼,從來都是一件不需要負責任,很容易裝逼,很簡單的事。說句老實話,我也吐槽過OGRE的一些bug,一些不爽的設計,但是真正輪到自己上,真的就牛逼哄哄,別人都是垃圾了?看看OGRE開發團隊人員的資歷,看看OSG團隊開發人員的資歷。OSG團隊有一個是國內的王銳,清華畢業,圖形搞了多少年,紅寶書的譯者,你真的覺得這些人都是業餘的,代碼是架構混亂的?不客氣的說一句,國內開發3d引擎的,做圖形學的程序員,不算新入門的,90%以上的人寫不出OGRE這類引擎質量的代碼。這樣的代碼在你眼裡是如此的差勁?現在github這麼方便,talk is cheap,show me your code。

3、吐槽別人的東西總是容易的,但是吐槽的時候,請言之有物,而不是一句「垃圾」,「差勁」,「三流」,這樣其實跟潑婦罵街沒什麼區別。我看過很多吐槽OGRE的,平心而論,OGRE就是個渲染架構,很多功能做得也不完善,這是事實。但是,作為一款學習引擎,圖形學的3d引擎,綽綽有餘。麻煩你下次吐槽的時候言之有物行不?收起你的不必要的傲氣,或許你是大神,或許你有過不錯的作品,但是從你的回答以及那麼多的點贊,我只看到了烏煙瘴氣。拜託,要噴請來點實際的,好嗎?

------------------------------------------------------------------------------------------------------------------------------------------

華麗麗的分割線,更新於2016.11.14日

看到評論里有人吐槽說言之無物,只有噴,那麼還是花點時間講講自己的一些體會。講得不對的地方,大家可以隨意噴。這部分大概會隨意講一下,不會太注重組織語言。

先講一下我對目前一些引擎的看法。我最熟悉的引擎是OGRE跟UE,看過但不太熟悉的引擎有鬼火,OSG,COCOS2d-x,KlayGE。所有這些引擎,被噴最少的是UE,畢竟名氣擺在那,很多人心存敬畏,都不敢噴了。從代碼質量而言,我認為鬼火是裡面最差的,cocos略好一點,KlayGE跟OSG應該是差不多的,OGRE我排得更靠前一點,UE無疑問最好。其實用過UE編輯器的都知道,UE這兩年由於迭代太快,編輯器崩潰非常多,但是畢竟名氣擺在那。至於UE好在哪裡,一般人只是停留在畫面好這一層面。我講一部分我親身經歷的。UE的代碼管理,那是相當的高效規範,大概在UE4.5的時候,我自己實現過一個max導入動畫到UE,實現動畫的各種物理例如摩擦力,加速度,風阻,向心力等等,當初UE自帶的Matinee不夠給力,長路徑編輯之類的,還有早期跟Oculus dk2的接入不是那麼的合拍,我就自己實現了。實現過程中發現UE的Animation裡面有幾個成員變數是多餘的,反正就是發現了一些冗餘代碼,本身這個在大項目裡面經常容易存在的東西,就是這麼一點小東西,在後續的版本裡面迅速修復了,刪掉了。這個給我留下了極深的印象。一般公司的項目,代碼的維護都不是那麼的規範,有些代碼誰寫的,有什麼用,隨著時間的推移,會經常性的存在維護問題,這麼海量的代碼,還能如此高效的運作,是非常不易的事。UE的江湖地位,真的不是浪得虛名,不僅僅停留在「畫面好」這一層面。

很多人噴Cocos,我見過無數人噴,然後cocos看著被噴到一文不值,好像學了Cocos會悔一生,看了cocos代碼會立馬降低自己水平。對這種噴子,我其實是不屑一顧的。首先,我們要確定,Cocos的代碼沒有像別人噴的那麼糟糕。如何確定?很簡單,Cocos代碼的架構師,也就是帶隊做Cocos源碼的人,年薪有沒有百萬我不知道,大幾十萬肯定有,你看看天朝的程序員,有幾個收入比他們高的?大多數情況下,收入跟能力是成正比的。如果你要證明你能力比他們高,收入又沒有他們高,也很簡單,自己把cocos大改一遍,做個分支,上傳到Github,如果碾壓了Cocos,保管你的收入瞬間提升上去。我們說,噴人有兩種噴,一種是消費角度的噴,一種是專業的噴。從消費的角度,例如你不會設計汽車,但是你能噴別人的汽車設計得差,無所謂,可以隨意噴。但是專業的噴,如果你能力還不如別人,盲目的噴,就毫無意義了。

因此我的觀點:只要是代碼質量比你高的,比你牛逼的人的代碼,你都可以看,絕對不是非要看頂級的代碼。在c++不是那麼牛逼的時候,看一些設計不是那麼複雜,比較清晰易懂的代碼,怎麼也有助於水平的提高。剛入門就去看UE的代碼,除了逆天的人,幾乎可以肯定就是個悲劇。等你能寫出cocos這樣的代碼了,再看水平更高的代碼,一步一步來。事實上,國內的程序員,很多人一輩子也寫不出cocos這樣的代碼,年紀大了,轉行的,要麼是功成身退,財務自由了,要麼是邏輯程序員做不下去了,轉行了。邏輯程序員轉行的,幾乎可以肯定寫不出cocos這樣的代碼。

基於這個觀點,隨便一個比你牛逼的代碼,都可以看,看什麼隨意。OSG代碼質量比cocos好不少,搞OpenGL的很少沒有看過這個引擎的,OGRE多年來是開源引擎第一,搞圖形學入門,很少人沒有看過這個引擎的。只能你能達到這類水平,恭喜你,你在業內至少也能混下去了,再考慮進階。不少人在編碼的過程中都會有過迷茫,都會不知道如何提高自己的水平,我經常的回答是:就算你是搞QT的,你在搞QT的時候如果能把QT的源碼擼一遍,能隨心所欲的修改QT源碼達到你想要的目標,做成了QT的專家,你同樣能達到不錯的成就。反過來,你本身是從某個引擎學習過來的,然後覺得自己水平高了,然後不斷的黑這個引擎,這種人我是極度鄙視的。感恩你成長過程中幫助過你的人,這是一種基本的品德,因此我會對比引擎的優劣,但基本不會噴引擎。

圖形學怎麼入門?知乎上討論很多,我見過很多,不需要多我一個意見。其實很多人的意見都很中肯:先自己實現一遍軟光柵。這句話其實我跟很多人講過,但是聽過的人,十個有九個不會去這麼做的。不去做的原因很多,懶惰,不會……不管是什麼原因,我都非常的惋惜,因為這真的是非常好的理解顯卡,理解光柵化的必備過程,能少走很多彎路。軟光柵之後,看引擎,可選擇性的看,可隨意看。作為一個引擎新人,即使是鬼火,cocos這類入門引擎,大概率都能給你啟發。等你能寫出cocos這類引擎之後,其實路怎麼走,大概率已經不需要別人告訴你了,這個成長的過程中,你至少具備了基本的自學能力,了解了非常多的學習方法。後面的路怎麼走,你自己都心有定數,不需要別人再告訴你了。


樓主應該是有手游背景吧

那麼 SIO2 或 鬼火

簡單的不能再簡單的結構了

入門級引擎不要搞那種特別複雜的

一旦找到感覺,迅速過渡到更成熟的引擎上面去


先介紹下背景:

最早用cocos2d-iphone寫過一點東西,後來轉cocos2d-x玩了一段時間,核心引擎部分的代碼看看改改;

研究過一段時間KlayGE,之前搞定了其OSX/iOS port,(不過不是很完美,還在繼續搞搞),Linux部分也幫忙維護了下,有寫過一些讀書筆記;

最近玩Unity比較多,在上面實現過一些特技,勉強可以說對渲染部分比較熟吧;

UE4隻看了一部分代碼,沒怎麼實際用過;OGRE沒用過...

從我個人觀點來看,cocos2d-x的代碼質量比較一般(嗯你懂我意思就行了...),如果項目需要的話簡單看看就行,但是很多地方的寫法和設計(譬如歷史原因造成)會給你造成誤解。。。

KlayGE的代碼質量很高,不過問題就如你所說實驗性的居多,移動部分優化還得繼續做,適合單純的學習,不過需要你對DX/GL之類的有一定了解,能啃得動一些論文或者GPU GEMS之類的~

Unity的好處是上手容易,但是它是黑箱的,有些東西憑藉文檔查不到只能連蒙帶猜,u5之後有FrameDebugger稍微好點了(據小道消息說,看過引擎代碼的都反饋質量不行。。。)

UE4是大工程的典範,代碼規範、質量很不錯,值得學習~ 就是量太大了,畢竟一堆人做了很久……

OGRE我只知道資料很多……有書什麼的= =(不予評價了)

對於題主現在的情況,我個人建議是快速了解下cocos2d-x,看看跨平台封裝、GLES之類的基礎;然後有精力的話,可以從UE4入手了解一下一個完整的商業引擎架構,一開始不用摳特別細節的東西,了解整體之後對感興趣的部分再多看看。自己動手造個簡單的輪子也是不錯的選擇啦,邊看邊改~

如果想對某些知識點或實現加深了解,可以看看龔大的博客 http://www.klayge.org/ 里的一些介紹,及對應KlayGE里的Sample或實現;不過這個就主要是渲染部分了,如果是其他的譬如物理,可能還得看看別的~

順便安利下小刀大大的引擎 gameKnife · a graphic artisan 量級也挺適合學習的

再ps. 如果你對渲染部分比較感興趣的話,可以再推薦一些資料

OpenGL/DirectX資料很多,經典的紅寶書藍寶書龍書什麼的

Ray Tracing from Ground Up, Physically Based Rendering: From Theory to Implementation 教你寫渲染

其他的包括OptiX框架、Mitsuba

(有一些自己都沒看……逃


廢話不多說,上個乾貨:GitHub - Microsoft/DirectX-Graphics-Samples: This repo contains the DirectX Graphics samples that demonstrate how to build graphics intensive applications on Windows.

裡面有個MiniEngine,才54M,當然只有渲染的部分。

作為入門參考應該還不錯,還能學DX12多好。

發現是個老問題(逃


OGRE只是圖形引擎,不能算遊戲引擎


不要用cocos!

不要用cocos!

不要用cocos!


都了解一下,找一個順眼的鑽研

還是那句話送給每個都想做遊戲的人:搞清楚你以後到底是要寫引擎還是要寫遊戲

這個可是相當於編一個CAD軟體和用CAD在天正插件的幫助下畫建築圖的差別,重點是完全不同的

你讓CAD的主程序過來畫個建築圖試試?

國內對開發遊戲程序員的需求量遠遠大於對引擎開發的需求量,中國的所謂引擎開發,要我說。。。呵呵

我們還是談談中國的遊戲開發吧。。。

ps:鑒於你只寫過小遊戲。。。建議你先寫個大遊戲再考慮研究引擎,這樣你對引擎的各方面理解的更深(比如這個模塊有啥用?打個比方,shader模塊,光說多抽象?(當年我一開始學glsl就莫名其妙。。。)為啥要用shader技術而不是直接用多邊形?你把它在遊戲中應用過之後你就理解了)


egret engine 只做2d(推薦從2d開始學比較好,題主專註3d的話,就看看前面圖形學大神的回答吧)比較好入門,平台在html5 用typescript 語言,比js更規範,更好用。

缺點即是優點 ts國內資料博客太少,白鷺社區活躍人數不多,但發展潛力很大

我所在的學校本專業大三兩門大專業課flash遊戲設計(不學as和flash,實際上就是egret遊戲設計)以及下學期的遊戲引擎設計都是用egret wing來上手的,學設計模式,架構為主。

tpyescript的介紹

http://www.zhihu.com/question/21879449?sort=created(答者就是我們這門課的老師)

egret wing 基於vs code 優點全部繼承,很便捷美觀,適合國人使用.


1992年,3D Realms公司/Apogee公司發布了一款只有2兆多的小遊戲——《德軍司令部》,用「革命」這一極富煽動色彩的詞語也無法形容出它在整個電腦遊戲發展史上佔據的重要地位。這部遊戲開創了第一人稱射擊遊戲的先河,更重要的是,它在X軸和Y軸的基礎上增加了一根Z軸,在由寬度和高度構成的平面上增加了一個向前向後的縱深空間,這根Z軸對那些看慣了2D遊戲的玩家造成的巨大衝擊可想而知。

引擎在誕生初期的另一部重要遊戲出自id Software公司的第一人稱射擊遊戲——《Doom》。Doom引擎在技術上大大超越了《德軍司令部》,雖然遊戲的關卡還是維持在2D平面上進行製作,但牆壁的厚度可以為任意,並且路徑之間的角度也可以為任意,這使得樓梯、升降平台、塔樓和戶外等各種場景成為可能。

Doom引擎還是第一個被用於授權的引擎。1993年底,Raven公司採用改進後的Doom引擎開發了一款名為《投影者》的遊戲,這是遊戲史上第一例成功的嫁接手術。在此之前引擎只是作為一種自產自銷的開發工具,從來沒有哪家遊戲商考慮過依靠引擎賺錢,Doom引擎的成功無疑為人們打開了一片新的市場。

1994年發售的《雷神之錘》採用Quake引擎開發製作,Quake引擎是當時第一款完全支持多邊形模型、動畫和粒子特效的真正意義上的3D引擎。此外《Quake》的遊戲操控方式也樹立了FPS遊戲的標準。遊戲使用滑鼠來觀看、瞄準、定向以及用鍵盤前進、後退、側移,這也成了FPS遊戲最普遍的操控模式,直到今日仍沒有變化。

一年之後,id Software公司推出《雷神之錘2》,一舉確定了自己在3D引擎市場上的霸主地位。《雷神之錘2》採用了一套全新的引擎,可以更充分地利用3D加速和OpenGL技術,在圖像和網路方面與前作相比有了質的飛躍。

1999年id發布了Quake III,id Software公司在引擎授權市場上又大賺了一筆。

正當id Software獨霸整個引擎市場的時候,Epic Megagames公司的Unreal引擎問世了。除了精緻的建築物外,遊戲中的許多特效即便在今天看來依然很出色,蕩漾的水波,美麗的天空,龐大的關卡,逼真的火焰、煙霧和力場等效果。從單純的畫面效果來看,Unreal引擎是當之無愧的佼佼者,其震撼力完全可以與人們第一次見到《德軍司令部》時的感受相比。

看到Unreal引擎的成功,EPIC又再接再厲推出了Unreal2引擎。相比第一代Unreal引擎,Unreal2的全部代碼幾乎重寫,並集成了最新的編輯器。隨著遊戲開發的需要,遊戲引擎的內涵也在不斷擴大,Unreal2引擎擁有了更多的功能。Unreal2引擎期間有過一次小幅升級,被稱為UE2.5,渲染性能有了一定提高。有了第一代引擎的鋪墊,採用Unreal2及其升級型引擎的遊戲數量也大幅提高,其中的知名遊戲包括《湯姆克蘭西之細胞分裂2:明日潘多拉》、《天堂2》、《荒野大鏢客》等等。

到了DirectX 9時代,Epic又推出了Unreal3引擎。Unreal3支持64位HDRR高精度動態渲染、多種類光照和高級動態陰影特效,可以在低多邊形數量的模型實現通常數百萬個多邊形模型才有的高渲染精度,這樣就可以用最低的計算資源做到極高畫質。Unreal3引擎還提供了強大的編輯工具,讓開發人員隨意調用遊戲對象,真正做到所見即所得。

在1998年到2000年期間迅速崛起的還有一款引擎是Monolith公司的LithTech引擎。對於資深遊戲玩家來說,《F.E.A.R》這個名字一定不會陌生,而《F.E.A.R》系列遊戲就是用LithTech引擎開發製作的。LithTech引擎為這款遊戲帶來了細緻的縱深場景刻畫,全屏抗鋸齒、實時光影效果都表現完美,而在《F.E.A.R2:起源計劃》 中,LithTech引擎又加入了HDR渲染、動態模糊、後期處理、屏幕空間環境光遮蔽等最新畫質效果,也增強了物理和人工智慧,還完善了對雙核心處理器的支持。

曾獲得無數大獎的《半條命》採用的是Quake和Quake II引擎的混合體,Valve公司在這兩部引擎的基礎上加入了兩個很重要的特性:一是腳本序列技術,這一技術可以令遊戲以合乎情理的節奏通過觸動事件的方式讓玩家真實地體驗到情節的發展。這對於誕生以來就很少注重情節的第一人稱射擊遊戲來說無疑是一次偉大的革命。第二個特性是對人工智慧引擎的改進,敵人的行動與以往相比明顯有了更多的狡詐,不再是單純地撲向槍口。這兩個特點賦予了《半條命》引擎鮮明的個性,在此基礎上誕生的《軍團要塞》、《反恐精英》等優秀作品又通過網路代碼的加入令《半條命》引擎煥發出了更為奪目的光芒。

在人工智慧方面真正取得突破的遊戲是Looking Glass工作室的《神偷:暗黑計劃》,《神偷》採用的是Looking Glass工作室自行開發的Dark引擎。遊戲中的敵人懂得根據聲音辨認你的方位,能夠分辨出不同地面上的腳步聲,在不同的光照環境下有不同的目力,發現同伴的屍體後會進入警戒狀態,還會針對你的行動做出各種合理的反應,這在以往那些純粹的殺戮遊戲中是根本見不到的。如今的絕大部分第一人稱射擊遊戲都或多或少地採用了這種隱秘的風格。

Valve公司在開發續作《半條命2》之時,決定自己開發遊戲引擎,這也成就了另一款知名的引擎Source引擎。與Unreal引擎一樣,Source也不是一款簡單的3D引擎,它同樣包括了3D圖像渲染、材質系統、AI人工智慧計算、Havok物理引擎、遊戲界面、遊戲聲效等各個組件,而且創造性地使用了模塊化理念,結合Vavlve公司的Stream平台,遊戲引擎的修改和升級都非常簡單,這也使得Source引擎可以長盛不衰,至今依是主流引擎之一。

在DOOM3和半條命2的同時代,育碧公司利用CryENGINE引擎做出了另一款3A級的遊戲《孤島驚魂》。CryENGINE引擎使用了「PolyBump」特效,利用很少的多邊形做出了大量多邊形才能實現的遊戲效果,遊戲中的動態光影效果也非常出色。CryENGINE引擎還HDR高動態壓縮、3Dc等技術,後期還通過patch補丁升級了SM3.0支持,畫面又有所增強。

後來CryTek的CryENGINE2引擎在DX10時代締造了另一個畫質新高,那就是著名的顯卡危機(《孤島危機》)。06年底,由CryENGINE2引擎的《孤島危機》奪得了最強0 Directx10畫質大旗,並保持至今。

除去以上幾款知名的遊戲引擎,還有不少遊戲公司的作品素質也很高。

《馬克思佩恩》採用的是MAX-FX引擎,這是第一款支持輻射光影渲染技術的引擎,這種技術以往只在一些高級的建築設計軟體中出現過。MAX-FX引擎的另一個特點是所謂的「子彈時間」,這是一種《黑客帝國》風格的慢動鏡頭,在這種狀態下甚至連子彈的飛行軌跡都可以看得一清二楚。

《紅色派系》採用的是Geo-Mod引擎,這是第一款可任意改變幾何體形狀的3D引擎,也就是說,你可以使用武器在牆壁、建築物或任何堅固的物體上炸開一個缺口,穿牆而過,或者在平地上炸出一個彈坑躲進去。

《英雄薩姆》採用的是Serious引擎,這款引擎最大的特點在於異常強大的渲染能力,面對大批湧來的敵人和一望無際的開闊場景,你絲毫不會感覺到畫面的停滯,而且遊戲的畫面效果也相當出色。此外值得一提的還有《海底驚魂》所用的Krass引擎,這款引擎被作為GeForce 3的官方指定引擎,專門用於宣傳、演示GeForce 3的效果,視覺方面的表現無可挑剔。

如今的directx12時代,Unreal引擎已經開發至第四代,Cryengine也到了第三代,市面上的3A大作不斷。國內也湧現出很多優秀的自研引擎,如製作Flexi引擎、Next-Gen引擎、黑火引擎、Laya、C2engine等。但是許多優秀的遊戲開發者正在退出遊戲開發市場,轉而進入引擎授權市場,僅靠開發引擎吃飯。儘管引擎的不斷進化使遊戲的技術含量越來越高,但最終決定一款遊戲是否優秀的因素在於使用技術的人而不是技術本身。引擎相當於遊戲的框架,框架打好後,你只需往裡填充內容即可。框架只是提供了一種可能性,遊戲的精彩與否取決於內容如何而非框架如何。正如《無人永生》開發小組所說:「所有問題最終都會歸結為一點——你的遊戲是否好玩。」


@錢康來我又來給錢錢捧場了,錢錢說的挺好,這句話很重要要放在開頭。

然後,我是來潑冷水的。

有人提到KlayGE,有人提到Unreal4,有人提到OGRE,都很好,非常不錯,因為一些機緣巧合,我給KlayGE提交過一部分代碼,所以對KlayGE都有一直在關注,並且也簡單閱讀過代碼,Unreal和OGRE我是不太知道,但是我想說的,不管這些啥吧,你C++過關了嘛?那一片boost你能知道哪個是哪個嘛?

不是我黑Milo翻譯的書,這本書我看的時候反正感覺就是大而全,而且偏工程不偏圖形理論,所以你圖形理論過關了嘛?這本書值得學習注意的是裡面提到的各種Ref。

錢錢有提到刀神的gkEngine @易愷銘 ,論代碼,刀神的那一套反而閱讀起來會非常順暢,不是我黑刀神的代碼寫得不鬼畜,我還是試著召喚他看看吧。


說下自己的經歷吧僅供參考,我看完那本書後基礎基本和題主差不多,然後我根據那本書按照自己的想法設計了自己的2d引擎,使用何方式上是按照自己對unity的理解來設計的,然後我開始按照自己的想法逐個系統實現,先抄了ue4的數學庫,看了看cocos2d,然後仔細讀了unity的cs代碼,對於某些系統仔細了解了多個引擎的實現,最後總共花了一個季度的時間磨完了這個2d引擎的核心部分,這個引擎到最後可以相對方便得開發出一些簡單的小遊戲。這個時候,遊戲引擎的多數系統大概是個什麼樣子我已經基本瞭然於心,然後我開始搗鼓多線程,順著這條線開始系統學習opengl,然後深入研究了實時渲染管線,充分了解之後我開始同時學習動畫和渲染,動畫看計算機動畫演算法技術,渲染看pbrt,然後開始讀一些能力範圍內的siggraph論文並找一些適當的進行實現,通過這麼一折騰,數學基本不是什麼問題,對於渲染的本質也有了相對深的理解,接下來我開始學習dx,這個時候學起來就真的是飛一樣的快了,數學部分基本沒有任何障礙,圖形演算法也不會覺得很奇怪,至於shader什麼的可編程管線幾乎是一看就懂。接下來就可以找個成熟的引擎一邊看一邊抄了,剩下的就是耐心和堅持了,基本上不會有什麼攔路虎。所以我覺得,看ue4最靠譜。


引擎架構沒有什麼好和不好之分,只有用的人用的好和不好之分。就我個人經驗來看,對於引擎技術的理解不是靠研讀代碼來提升的,而是靠解決實際問題來提升的。任何引擎架構都受限於那個時代的大背景和大環境,引擎中存在大量代碼用來解決或者規避各種Detail問題,比如各種OS、硬體驅動和應用的適配等等,而我們中的絕大部分人根本沒有機會在閱讀代碼的同時去跟寫這行代碼的作者進行交流,所以很可能是花了大量的時間也無法體會作者寫這代碼背後的意義。

如果希望提升自己對於引擎技術的了解,我的建議是,先去選擇使用一款引擎,Unity也好,Unreal也好,或者其他引擎都可以,然後去網上搜集並嘗試解決與其相關的10000個技術問題。在你解決問題的過程中,自然就會找到這個問題的答案了。


OGRE還是比較適合初學者作為教科書來學習的,它的代碼非常規範,架構清晰,對於學習渲染引擎的基本概念還是很適合的


部分反對 @Chaos 的回答

對不要去看Klay和Ogre這部分表示贊同

對反對建議看unreal4。unreal4在我看來無疑是這個世界上最好的引擎了,但是它是豐富的工程實踐基礎上的產物,如果你沒有相應的,或者說相當的經驗和水平的話,看這個東西完全不可能明白為啥要這麼設計。如果貿然去看源碼就更是呵呵了,而且,說實話 Unreal4的源碼比cryengine的是好非常多,但是在任何程度上都不應該說是容易閱讀的,更別提其中的大量的生成代碼了。在沒有工程實踐的基礎上貿然開始看源碼一定會是效率非常低下的

先寫實際的遊戲,在實際的開發中了解引擎的各種實際的需求,然後帶著疑問去看相應的部分,才是正道。

---------------------------------------------------------------------------

接著用u3d或者u4寫遊戲啊 寫一個 不斷完善 寫著寫著才會明白引擎到底是幹嘛的為啥這會要個模塊 直接寫引擎抄代碼都是扯淡 要真覺得己經可以寫引擎了 寫個2D啊 不推薦cocos2d 用的人多也不代表引擎好 學它只會讓自己品味變差 還不如ejoy2d

利益相關 ejoy員工


看你項目需要了,如果是2d,libgdx首選。cocos2dx也行,但是我個人覺得這貨已經過氣了,1.x版本時用過,那時bug還不少,據說2.0之後的bug也很多。

如果是做次時代,那麼用UE4,UE4用了一年多了,除了開發效率,感覺其他方面比unity都有強很多,性能不用說,特別是PBR材質;unity要在移動端、VR做次時代是非常困難的,甚至是先天缺陷(這個別噴,我說的是高清材質下仍然保持高幀率),但UE4很容易做到。


難道就沒人說unity3d么


必須是horde3D


推薦研究一下LayaAirx引擎,支持2D3DVRAR。還可以同時發布Flash頁游、APP手游、

HTML5遊戲。支持as3JSTS三種語言開發。


只是一個初學者 我倒是覺得cocos反而很合適 撤什麼渲染 遠著那


看見這麼多答主的回答我突然有一個疑問

題主想學習什麼類型遊戲的引擎?

rpg的話rpg maker上層開源

avg的話krkr2上層開源


推薦閱讀:

使用Unity5開發手游,使用FMOD或wwise音頻插件而不是自帶的聲音系統有哪些好處?
unity做手游有哪些坑?
怎樣知道FC,MD,SFC,老式街機基板等老遊戲機在運行時,CPU和內存的佔用率?
知乎上有多少知友從事基於cocos2dx或是其他cocos2d遊戲引擎的遊戲開發的?
為什麼世嘉土星做不到真3D?

TAG:遊戲開發 | 遊戲引擎 |