前段時間開始開發新遊戲引擎,目前也是正在開發狀態。我常說,碰撞+空間算法部分是3D遊戲中的核心,也是最難制作的一部分。抱歉,這樣說恐怕有點不夠準確,準確來說,Collision AI是最難得一塊。難點在于,在制作過程中,那些數字很抽象,往往要思考很久才敢下手。
Collision的實現非常簡單,Collision檢測目前資料眾多,算法也很成熟。往往在遊戲運行中,Collision都有個和它對應的AI系統,我簡稱Collision AI。因為碰撞可以機械化的檢測,並且準確率很高。在碰撞檢測的下一步,就是發生對應的處理。因為我在制作一部實時引擎,目前正處于碰撞流程的制作過程,這一步直接涉及到很多物理計算,很多錯綜復發的邏輯處理。為了下一步開發能夠更好的進行,所以把這一步直接規劃到AI模塊中。目前做了有些時間了,摸索出了一些AI方面的心得,同時又在網上又很少看到有這方面的文獻。專業點的可以說目前沒有,全是保留技術。
制作Collision AI首先是必須換腦。不要用簡單的概念去思考它。否則實際做到那地方時,你會感到完全摸不著邊。
碰撞流程主要依靠事件觸發為主。碰撞檢測部分應該放在刷貞時實現,否則來一個快速運動的object,那是很容易檢測丟的。而刷貞部分,應該做一個專用的刷貞器,邏輯貞按每秒固定刷30FPS或則更好,而物理貞可以任意。因為檢測運動object必須要保證檢測頻率是集中式的,而不是離散的。每秒的固定刷貞技術可以在刷貞器中用deltaTime的減法實現。這樣就可以準確無誤的檢測碰撞了。你可以根據喜好制定檢測的方式,比如先在地圖系統中實現區域檢測,然後再進一步執行外圍的碰撞盒檢測,最後再進行精確的Tri檢測。不過目前都用接近的幾何體來代替Tri檢測。
然後就是最關鍵的碰撞AI處理了。在制作這一部分時,首先要有很完善的數據來源,可以很方便的計算。比如2個object發生碰撞時,obj1位于obj2的什麼方向?obj1要向何處去?obj2要向何處去?是obj1讓obj2先過,還是obj2讓obj1先過?如果要讓obj2過去,obj2應該怎麼繞過obj1?向下繞?萬一向下繞不通怎麼辦?那麼向上繞,可是這時上面又有另一個obj3,這時候怎麼辦?這些問題只算整個Collision AI的九牛一毛,微不足道,可見碰撞流程何其復雜,我將之規劃到AI模塊中,完全不算過份。
而我要再次說明,在Collision AI的處理上,數據來源可算重中之重。
其次是,空間運動框架。你想想,我要控制obj2向某個方向移動,如果只給引擎一條指令,那是何其方便?可是在開發空間運動時,我們往往把全部精力集中在算法上,而忽略了後面的碰撞流程系統,碰撞流程系統會大量的用到空間運動引擎,而且幾乎每次都是平滑運動,並不是一次到位。我為碰撞流程系統,從新寫了空間運動部分,現在控制起來雖然還是比較吃力,那些邏輯很繞腦子,但這樣結合運動+碰撞的空間運動引擎已經比以前進步了太多太多了,大大的方便的Collision AI部分的開發。
再其次,是邏輯判斷的支持部分。我舉個例子,obj1向obj2方向運動,obj2又向obj1方向運動,這種碰撞在碰撞引擎中我將之稱為對碰,obj2延0度方向運動,obj2延90度方向運動,我將之稱為直角碰,在實時的RTS引擎中這些都是要區分的,用來為後面的AI判定打下基礎。
再其次,才是簡單到不能再簡單的Finding path之類的,什麼A*,D*,V*,頂點尋路等等。這些是目前非常成熟的技術,索性我就不予以詳談了。
Collision AI我目前算是成功在望,雖然地球上以前有過一些高手,他們開發C&C,開發StarCraft,RedAlert,Warcraft,他們都走過了Collision AI這艱深的一步,最後邁向成功殿堂。雖然我不算什麼鳥名人,但步其後塵,可以預見的遊戲引擎成功在望,心裡十分舒適。大有成功感。
總結一下。Collision AI引擎不要小看它,它和空間運動引擎這兩塊真的是RTS+ARPG遊戲引擎中最難得兩塊。注意數據來源,運動框架,以及邏輯判斷支持這三部分。開發時,應該保持六根清淨,五蘊皆空狀態。如果你會被那些邏輯判斷攪到神經衰弱,應該立即stop,喝喝酒,玩玩女人,但不要沉迷其中,關鍵是讓身心鬆弛。否則很難完成一個龐大的遊戲引擎系統。
最後小聲說一句。遊戲引擎即將完成,規模不小。有同仁願同學,願一起做事。歡迎與我聯系。在下張某,各方同行只要是同行,做程序的,美術的,策劃的,一律收下了。大家慢慢想辦法合作。
第一次寫技術文獻。望站長將之甩進精華區。多謝。
交流長存。阿門~~