Wednesday, March 21, 2018

Switch Hardware Experiment

現在的遊戲程式們大概很難想像,在遊戲引擎變成免費之前,想要將遊戲移植到新平台,如果沒錢買引擎,唯一的方法就是花時間啃文件,然後紮紮實實的從無到有將系統一步一步實作出來。原本以為今後應該是沒有機會再幹這種需要硬功夫的工作了,沒想到最近在因緣際會下,接到了一份將OGLES的繪圖引擎移植到Switch原生的繪圖API之上的工作,而又有了一次摸到新主機硬體的機會。



通常在移植既有引擎到新硬體上時,我都會先完成memory,file system以及OS相關部分的移植,然後才開始動繪圖部分。這次因為只需要移植繪圖部分,所以輕鬆了一些,不過取而代之的就是要先讀懂別人的程式碼並推測出整個系統架構。而繪圖部分通常我會從幾個步驟來逐步實作

  1. 初始化device
  2. 將device與OS原生context串接,這部分有時還挺麻煩的
  3. 建立frame buffers以及swap chain. 到了這一步,基本上就可以看到畫面了。在fixed function的硬體上,到這一步後其實就能draw primitive了。但是現代支援shader的硬體就比較麻煩了,還要很多步驟才能開始繪出東西。
  4. 實作vertex attribute layout以及vertex buffer
  5. 了解shader語言以及如何Compile and load shaders
  6. 實作貼圖的生成以及載入,到這一步才能開始測試draw primitive

理解硬體如何運作並實作其實並不難,看看文件以及範例其實就懂八九成了,真正麻煩的地方是要思考如何巧妙的把新的繪圖流程套到既有的系統架構上,讓系統可以跨平台執行,同時又不失效能,這部分就很需要經驗了,尤其是遇到架構大更新時(比如DX9進化到DX11)就更考驗功力了。這次Switch的原生繪圖API是類似Vulkan的架構,為的是減少driver的複雜程度以及負擔,而將大部分驗證以及command buffer、queue、記憶體等的管理工作都交由application來負責,藉此解決small batch的問題。也因為整個pipeline 完全不同了,要套用到原本的架構需要許多特別處理。

接下來兩個月大概都會忙這份工作而無法專心在新遊戲的開發上面,不過新遊戲的概念總算有些突破,接下來應該就可以花些時間來製作雛形了,不過恐怕就要犧牲些休息時間了。完成這份工作後,應該就可以投入更多的時間在新遊戲的開發上了吧。

1 comment:

daoshengmu said...

加油了! 期待之後關於在Switch開發引擎的分享~~