前幾年寫過一本書《手把手教你架構3d遊戲引擎》電子工業出版社,主要內容講的是固定流水線程式設計,目的是讓讀者理解第一代引擎是如何實現的,從本篇部落格開始,給讀者介紹關於使用可程式設計流水線自己搭建3d遊戲引擎,我將它設為高階篇,我會從查資料學習技術最基本的講起,教給讀者如何乙個人搭建一款接近商業的自研引擎,希望讀者能學習到搭建引擎的一些小技巧,幫助你理解可程式設計流水線引擎流程,以及提公升你優化引擎的能力,3d遊戲引擎其內在的本質是相同的,只是表現方式不同而已,所以學習自己搭建一款引擎對你技能的提公升幫助非常大,至少你再接觸其他引擎時,做二次開發信心還是大大的有滴,而且更有助於你理解unity引擎的開發以及後期優化。
市場上對於3d遊戲引擎的開發需求還是非常大的,雖然unity和ue4非常成熟了,還是有很多大廠自研引擎,另外一些做虛擬**公司也在自研引擎,畢竟自研引擎的**是我們自己寫的,有什麼問題可以快速的定位,而且可以針對專案的需求做一些定製開發,非常方便,底層**也可以根據專案需求做一些優化。有自研引擎的公司都會有自己的引擎部門,它們的職能就是負責引擎的開發以及優化。對於自研引擎,說的明白一些就是我們可以針對自己的專案針對性的開發一款引擎,這款引擎功能並不需要多強大,能滿足我們專案求即可。引擎的開發是乙個團隊的事情,乙個人很難製作出一款成熟的商業引擎,工作量太大,開發周期也會漫長,涉及到的技術點也比較多,但是作為引擎開發人員對於引擎常用技術還是需要掌握的。假設公司讓你組建引擎團隊,開發一款商業引擎,我們應該從哪幾方面入手:
首先要清楚我們的引擎是用於什麼專案開發?
我們的引擎需要解決什麼問題?
需要開發哪些編輯器?
如何利用現有技術幫我們解決問題等等;
這些問題我們引擎開發人員必須要解決的,從本篇部落格開始,我就教大家如何開發商業引擎?同時回答上面提到的問題。
下面我們先從引擎能解決的問題講起,這個非常重要的,因為它關係到你的引擎是否足夠強大,能否解決專案提出的各種需求。
每款引擎都有自己的特色,比如unity引擎和ue4引擎,我們自研引擎也有自己的特色,後面的開發也就是圍繞這些特色展開,給讀者列舉如下:
-引擎平台支援
,我們的引擎支援windows和linux,os是64位的,在windows平台的編輯器是visual studio2017,在linux平台的編輯器是gcc5。
-引擎基本功能
這個關乎我們**的編寫:
引擎架構是基於元件模式開發的;
支援**以及資源熱更新;
資料驅動的;
支援外掛程式模式,
跨平台的
便於其他外掛程式的使用,擴充套件引擎功能;
支援指令碼lua程式設計;
內建偵錯程式;
支援資料打包;
下面再介紹渲染模式。
-引擎渲染
判斷一款引擎是否成熟,我們需要開發相對應的編輯器工具鏈:
shader 編輯器用於shader指令碼開發以及除錯,
packing打包編輯器用於資源的打包,
粒子編輯器,
animation動畫編輯器,
ui編輯器,
場景編輯器等等。
-第三方庫
我們的引擎不可能什麼事情都需要自己從頭寫到尾,即使unity和ue4也用了很多外掛程式,我們的引擎也不例外,我們也需要用到第三方外掛程式,比如:
lua
bgfx等等,後面會給讀者詳細說明。
-小結
以上是我們自研引擎的要實現的功能,雖然相比unity和ue4,功能方面還不完美,相信隨著我們把引擎框架搭建起來後,功能可任意擴充套件,從而把引擎功能持續完善起來。每一款引擎都是從不成熟到成熟,unity和ue4也是這樣的,上面列舉的要實現的功能,對於個人開發者來說已經非常龐大了。明知山有虎,偏向虎山行,從下篇文章開始,我教大家怎樣去實現每個技術點,怎樣查閱資料,以及把現有的,成熟的技術模組嫁接到我們的引擎中。
手把手教你樹莓派3 (一) 裝機
概述 raspberry pi其實可以看做乙個微型的計算機,我們可以在上面裝各種作業系統,然後搭建伺服器,當然這只是它的一小點功能罷了。與我們常用的pc機不同的是,ras pi有gpio,我們可以讓raspberry pi來控制這些引腳,從而傳送一些物理訊號給其他的裝置,比如常見的led燈。購買事項...
C語言 指標高階 《手把手教你學C語言》
3.多級指標 3.2通過指標引用二維陣列 4.函式指標 對於普通的陣列,其一大缺點就一旦定義以後就無法改變其大小容量。這其實本質上是靜態記憶體的缺陷。靜態記憶體 對於系統分配的記憶體就是靜態記憶體也叫棧記憶體,比如定義的變數,函式等等都是由系統進行記憶體的分配。因而程式設計師自己無法靈活對其進行更改...
手把手教你學python3第五講
我們學習字典,字典是一種對映型別,字典不是一種序列,字典的關鍵字我們叫做key,值叫做value,字典也可以叫做雜湊表或者關係陣列。比如你去查one的意思,one就是key,1就是value。字典用大括號括起來,字典呼叫要輸入key而不是索引,它不是序列沒有索引,我們來實踐一下 舉幾個例子 get也...