腾讯游戏开发精粹
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.6 利用多边形数据预计算SDF

在实际使用中存在的另一个问题是,绕行障碍物时角色有明显的抖动感,而期望的结果是平滑滑行。回到之前的SDF数据生成流程中,先离散栅格化地图,然后根据栅格数据计算生成SDF数据,如图1.8所示。

图1.8 抖动

角色(圆形)半径r=0.5,在绕障碍物滑行时的轨迹呈锯齿状,因为SDF数据本身就呈明显的锯齿状。而期望的结果如图1.9所示。

图1.9 平滑

因此需要优化SDF的计算。前面的SDF计算是栅格顶点到阻挡栅格的距离,阻挡区域本身是由多边形构成的,那么实际角色应该是绕着多边形的边做直线移动的,因此可采用点到多边形的距离来计算栅格顶点的φ值,在多边形内部的点距离值为负,外部为正,得到如图1.10所示的SDF数据。

图1.10 根据点到多边形的距离计算φ

通过双线性过滤方法,可得角色半径r=0.5在A、B、C三处的φ值均为0.5,因此角色在绕行障碍物时可以做到沿边平滑移动。