昨天和同事無意中聊到開發引擎使不是一件容易的事情。
我想首先需要搞清楚的是什麼是引擎。早在上世紀80,90年代,那時候的遊戲開發都是從頭來做,沒有什麼引擎,後來一些聰明的開發者把
個個遊戲中共用的部分獨立出來,包裝成了乙個函式庫並提供一組api共二次開發者呼叫,這邊有了引擎。也就是說引擎的本質概念就是乙個
能夠在不同遊戲專案中,或者至少是同型別遊戲中重用函式庫而已。
而今的現代遊戲引擎則更加複雜,它融入了遊戲開發的各個模組系統,資源管理系統,渲染系統,物理系統,聲音系統,等等。這些系統有些
容易實現一些,有些較為複雜,而且它們之間有時候並不是完全隔絕獨立的,更過的是相互交融配合,互為支援。更為重要的是,乙個完整的
引擎還要有完備的工具,什麼場景編輯器,特效編輯器,角色編輯器等等。
現在回過頭來說說開發乙個引擎使不是件容易的事情。怎麼說呢,總的來說還是一件比較有挑戰的事情。從兩方面說一方面是引擎的架構設計
前面講過了引擎是由各個系統組成,它們之間存在著或多或少的關係,這就需要良好的架構設計,使各個系統最大限度保持獨立,同時在相互
呼叫相互支撐更加自然協調,做到這一點其實並不容易,沒有一些年的經驗是很難做到的。在有就是實現層面,小到乙個函式的定義,變數的
宣告大到工具的易用性等工作量也著實不小。以我的經驗,一套3d引擎,不含任何邏輯部分,再加上編輯器**,大約是15w~20w行左右.
如果認為開發引擎很容易,我覺得也許只有卡馬克才有資格,他能夠在短時間內重寫乙個引擎。而除此之外認為做引擎很容易,要麼是一位還
不為人所知神人,要麼就還沒從有頭到尾寫過真正的引擎,或者能夠拿得出手的引擎。畢竟現實擺在我們面前全人類牛逼引擎也超不過15個。而大家耳熟能詳的quake,unreal, cryengine,這些當代牛逼引擎也經過若干年甚至十幾年的不斷進化才來的。
至於說做一些特別玄的效果是很容易的事情,我覺得這個要從幾個方面來說,如果是shader實現的特效,比如hdr,那麼這當然是很容易的,
至少有大量現成的shader**可以使用,你只要加進去就行了。如果是一些演算法性比較強的比如一些光影響效果等,如果僅僅是乙個單純的
展示,寫個幾千行甚至上萬行的程式,就僅僅展示這一項(就像很多**中的試驗程式那樣),這時的難度不是如何架構如何編碼,而是你
演算法,如果你參考的是別人的**自己去實現這個demo,那麼難度在於你對演算法理解能力,當然這些的前提是你的編碼不成問題,是乙個
c/c++的老手。
而真正的引擎考慮的層面要遠比這個高,它需要考慮這個特性與引擎其他部分的關係,呼叫過程,如何設計才能更加合理,什麼樣的實現方
式才能更加高效簡潔,增加這個特性對引擎的效能帶來的影響,對引擎開放的介面會帶來哪些變化,對工具製作帶來的操作,檔案資料格式
的變化等等等等,一些列問題,使乙個通盤的問題。效果的展示僅僅是開始,而不是結束!!!
那麼要製作乙個引擎到底需要什麼?錢?時間?,呵呵,這些是需要的,畢竟不能餓著肚子幹,但僅僅需要這些那豈不是遍地都是牛逼的引擎
了。最需要的是堅持與韌性!!!在不斷的設計編碼過程中來完善修正,甚至推翻再來,追求極致的過程。
要想製作出色的引擎
1. 對引擎及引擎各個系統深刻的理解,知道他需要做什麼,或者說只需要做什麼,這個直接決定了你做的是引擎,還是乙個大雜燴。
2. 對引擎及各個系統的結構性設計,這很重要,決定了你引擎的生命力。
3. 功底還算深厚的c/c++程式設計
4. 那就是你的執著與毅力了
前三條是可以學習,進步,提高的,關鍵在於第四條!
聊一聊如何提公升團隊開發效率
又是一年年底了,又到了忙著總結,忙計畫的時間了,相信每年的總結計畫裡,大家都有提高團隊開發效率的計畫。列了一大堆提公升計畫和目標。然而,這些計畫真的執行了嗎?這些目標都完成了嗎?過去的一段時間我一有機會就跟其他開發人員交流,並去試著從開發人員自身的角度去發現一些痛。有的開發人員抱怨限制太多,沒有意義...
聊一聊如何提公升團隊開發效率
又是一年年底了,又到了忙著總結,忙計畫的時間了,相信每年的總結計畫裡,大家都有提高團隊開發效率的計畫。列了一大堆提公升計畫和目標。然而,這些計畫真的執行了嗎?這些目標都完成了嗎?過去的一段時間我一有機會就跟其他開發人員交流,並去試著從開發人員自身的角度去發現一些痛。有的開發人員抱怨限制太多,沒有意義...
搜尋引擎 聊一聊網頁去重
網頁去重是有必要而且有好處的,首先,相似的網頁肯定沒有意思,應該提高使用者的體驗,所以應該把相似的網頁去重後顯示,或者聚合後顯示.其次,如果某些網頁相似的很多,說明其中內容 如果是非人為惡意製造的話 應該是最近比較熱門的內容,應該優先展示,還有,相似網頁去重可以節省索引空間.所謂的網頁重複可以分為以...