Friday, February 02, 2018

New Chapter

2018對我來說可能會是很特別的一年,因為去年結束掉一些事後,今年可以說是重新開始。前一陣子終於有時間靜下來回想一下過去幾年的生活,卻發現自己越走越遠離原本回國時想要的生活型態。因此今年開始,我便試著調整生活型態,看看接下來能走到哪裡。

首先最重要的當然就是做自己的遊戲了,不過光做自己遊戲沒有收入也是不行,再加上除了自己的遊戲也想做做其他有趣的東西同時多認識一些人,因此將目標訂在用40%時間做一些比較有趣或有技術挑戰性的工作來賺點奶粉錢,剩下60%的時間則用來做自己的遊戲。

所以今年一月開始參與一個有趣的專案,也因此開始更加深入的接觸了UE4。之前其實有開始試著將voxel的東西移植到UE4上,但因為種種原因做到一半就沒有繼續了,但是這次的專案卻得直搗UE4核心,改寫許多跟deferred shading相關的code跟 shader。這一陣子幾乎都是在trace UE4的原始碼,讓我回想起之前在AMD trace UE3原始碼的日子,不過那時修改的是global shader,相對起來不用對引擎架構了解太深入,只要了解RHI的架構就可以解決。這次因為要動到整個rendering pipeline,因此要對UE4整個架構有更深入的挖掘才有辦法植入一些新的shading模式。等專案結束後有時間我再來說說UE4的修改經驗。

而三月開始則要參與一個非常奇妙的專案,要直接跟某個console的繪圖底層對戰,幫新console硬體寫code是我覺得最有趣的工作之一了,所以我個人還蠻期待這個專案的。不過目前還不能透漏太多,等完成專案之後我再來分享一些經驗吧。

接下來則是自己的遊戲了,考量到時間以及人力,這次就決定使用Unity而不用自己引擎了。雖然改用了Unity,但我還是想繼續做voxel的東西,所以花了一些時間把voxel相關功能想辦法加入Unity之中了。因為Unity 5之後支援了hardware instancing功能,所以這一次我實際上implement了兩種不同的voxel renderer,一種是使用particle system,另一種則是使用了hardware instancing。而兩種voxel renderer也可以隨時更換。兩種voxel renderer的效能其實在不同狀況下各有優劣,可以視狀況選用。

有了voxel renderer後,一些voxel的特效也就能輕易地加入了,這次我還增加了對Magic Voxel檔案格式的直接支援,所以.vox檔可以直接拉入Unity中使用,這樣美術就可以直接用Magic Voxel來製作模型了。而為了增加同一個畫面中voxel object的數量,這次還使用了greedy mesh來做最佳化,同時還能自動產生LOD。


至於遊戲的內容,其實都還在構思中,也還有很多問題尚未想出很好的解決方案,所以其實進度是有點卡住了..... 只好多玩玩電動看看能不能找到解答的靈感了 XD