第3章 一種高效的弧長參數化路徑系統
摘要
2015年在某跑酷類游戲中想要實現一些創意玩法,需要一個路徑系統,人物的移動靠路徑引導,并且在路徑上有簡單的物理運動(走、跑、跳和碰撞反饋)。當時考察了一系列Unity與路徑相關的插件,它們均不能滿足需求。特別是弧長參數化的特性,即令曲線的參數t與曲線的長度L為線性關系,從而將參數t的線性變化映射到長度的線性變化上,實現曲線上的勻線速度運動,這一點是實現路徑上物理運動的基礎[1]。個別插件實現了類似的功能,但是其原理為暴力的線性插值,根據設定的精度將曲線拆成折線段組成的查找表,需要序列化和緩存大量的數據,對內存和包量并不友好。
該路徑系統的主要流程如下:
(1)使用最小二乘法,用多項式擬合路徑曲線的長度函數的反函數,利用擬合的反函數實現弧長參數化,這樣只需要保存少數的多項式系數,運行時對多項式求值即可,無須保存一個巨大的查找表和進行查表操作,而可以直接求解。
(2)根據實際需求,沒有使用常見的三次多項式曲線,而是構造了一條二次多項式樣條曲線,目的是簡化各種曲線的求交計算,同時維持C1連續。
(3)在弧長參數化的基礎上,把普通的運動計算映射到曲線上,以曲線的局部切空間標架為基準實現了曲線上的簡單物理運動,在曲線上也有可信的運動表現。