上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
第3章 一种高效的弧长参数化路径系统
摘要
2015年在某跑酷类游戏中想要实现一些创意玩法,需要一个路径系统,人物的移动靠路径引导,并且在路径上有简单的物理运动(走、跑、跳和碰撞反馈)。当时考察了一系列Unity与路径相关的插件,它们均不能满足需求。特别是弧长参数化的特性,即令曲线的参数t与曲线的长度L为线性关系,从而将参数t的线性变化映射到长度的线性变化上,实现曲线上的匀线速度运动,这一点是实现路径上物理运动的基础[1]。个别插件实现了类似的功能,但是其原理为暴力的线性插值,根据设定的精度将曲线拆成折线段组成的查找表,需要序列化和缓存大量的数据,对内存和包量并不友好。
该路径系统的主要流程如下:
(1)使用最小二乘法,用多项式拟合路径曲线的长度函数的反函数,利用拟合的反函数实现弧长参数化,这样只需要保存少数的多项式系数,运行时对多项式求值即可,无须保存一个巨大的查找表和进行查表操作,而可以直接求解。
(2)根据实际需求,没有使用常见的三次多项式曲线,而是构造了一条二次多项式样条曲线,目的是简化各种曲线的求交计算,同时维持C1连续。
(3)在弧长参数化的基础上,把普通的运动计算映射到曲线上,以曲线的局部切空间标架为基准实现了曲线上的简单物理运动,在曲线上也有可信的运动表现。