從零開始手敲次世代遊戲引擎(三十六)
接從零開始手敲次世代遊戲引擎(三十五),首先導入合併從零開始手敲次世代遊戲引擎(PNG特別篇)當中所寫的PNG文件解析器,然後手工編輯aili.ogex,向??材質添加eye.png貼圖。執行程序,可以看到??已經有了。(不過我們可以發現眼睛其實只是浮在臉前方的一個片面。。。這個是建模的鍋,不怪我。。。)
https://www.zhihu.com/video/929110345275019264另外仔細觀察可以發現右側的頭髮(side hair)沒有正確的著色。這是因為右邊的頭髮是通過對左側的頭髮進行鏡像得到的。雖然在Blender裡面看起來沒有什麼問題,但是這種鏡像會導致兩個問題:
- 導出的三角形頂點的旋轉方向從逆時針變為順時針,從而導致被GPU裁剪(Culling)掉;
- 導出的模型變換矩陣是下面這個樣子:(以X軸鏡像為例)
可以看到包括一個對X坐標去反的計算。而我們的shder裡面有對於法線的這麼一個計算:
其中的modelMatrix就是上面這個矩陣。這就導致法向量也被鏡像,也就是出現反轉。所以我們看到的就是上面屏幕錄製裡面那樣黑漆漆的。
這個問題我們可以通過修改OGEX導出腳本來修正,或者在今後我們編寫了我們的遊戲引擎的Editor之後,在Editor裡面修正。所以我們這裡就暫時不作進一步的展開了。
好了,到這裡我們對於圖形渲染基本管線的搭建就暫時告一個段落。當然圖形渲染是一個很深的坑,我們還有很多很多沒有實現的東西,比如隨便列舉一些:
- 點光源之外的光源類型
- 多光源
- 陰影生成
- diffuse貼圖之外的貼圖,如法線貼圖,位移貼圖,等等
- VS和PS之外的Shader,如Geometry Shader, Compute Shader等等
- 圖像後處理
在場景組織和管理方面,我們也有很多可以進一步完善的東西,如:
- 場景物體的層次結構,分組和定義在組級別的坐標變換
- 場景的非同步載入
等等。但是在繼續深入介紹這些東西之前,作為一個遊戲引擎的運行時,我決定先進行其它幾個重要模塊的基本構建,比如輸入模塊,驅動模塊,策略模塊,調試輔助模塊等等。
接下來說一下工程方面的進展。感謝CircleCI,在之前免費的Linux環境的基礎上,為我免費提供了基於macOS的連續集成環境。現在每一個push到github上的commit,都會自動進行Linux和macOS兩個版本的編譯和測試用例的執行確認,如下圖:
實現起來也很簡單,如下面這樣修改我們的circleCI的腳本即可:
確實非常方便,歡迎大家在自己的項目當中也多多嘗試。再次感謝CircleCI對於OpenSource項目的大力支持!
(最近一直在生病??,文章更新的比較慢了,請多多包涵)
最後順便說一句,第一屆中國大學生AR/VR競賽昨天拉下帷幕。雖然大賽自身的組織有很多的倉促,但是同學們的作品真的都很棒。期待大家加入遊戲開發的大家庭。
推薦閱讀:
※從零開始手敲次世代遊戲引擎(二十六)
※陳灼:我在2K的八年(序)
※準備玩到手殘么?200款遊戲,70家廠商,遊戲業決戰最後百天
※VG解密:老Infinity Ward談《使命召喚4》的開發得失
TAG:游戏开发 |