28.4.10

物理引擎

因為我的項目需要,最近開始接觸物理引擎(Physics Engine)。在這之前,我對物理引擎可謂一無所知,不是把公式都輸入進去,讓電腦計就行了嗎?而基本上物理引擎亦就是一個物理模擬演算的程式,只是它的設計往往可以很複雜,一方面需要注意演算方法的效能,另一方面要解決和權衡物理規律的準確性和多元性,譬如一般Flash遊戲所用的物理引擎和天文台預測氣象用的物理引擎兩者考慮的物理規律、準確性和速度要求差距甚遠,所以它也發展成實時性(遊戲用)和高準確性(科學用)兩個主流,並在精準度和運算速度兩者間作不同的平衡。

由於和現實世界有差別,在數位模擬可能會出現一些不同現象:例如一個乒乓球正飛向一塊牆,正常的的情況下乒乓球會碰到牆,然後反彈;但若果乒乓球以極高速飛行,它在數位世界的緊接的時刻便會有很大的位置跳動,它便可能在跳動的一下子穿過那塊牆,沒有發生碰撞並繼續前進。所以,為了防止錯誤,物體的大小和速度都可能需要有上下限制,或加入其他的約束。

物理引擎主要為硬物體、軟物體和流體的運動提供模擬演算,演算的模式或方法有許多,若要了解引擎的設計,當中涉及很多物理、數學和編程的背景知識,非門外漢能一時三刻理解,我想這也是相關工具和人手稀少珍貴的原因吧,但是這個情況將隨著更多開放原代碼的物理引擎出現和編程知識的普及而改變。

我主要接觸的引擎是從近年流行於在Flash和iphone遊戲中使用的Box2D。在Box2D的世界裡,除了有個綜合器(Integrator)去模擬不同的時刻外,還有個約束處理器(constraint solver)來解決多個物體在速度和位置間的的衝突,來避免物件重疊和關節脫掉。

(待續)

沒有留言:

張貼留言