对于我们的类Rogue游戏《Tile Crawl》,我们希望游戏的元进程能够脱颖而出,因此将其设计成一颗可供探索的星球。但我们的关卡地图本身已采用六边形网格,为了保持一致性,我们同样希望用六边形构建一个球体。我们不想使用五边形,而是试图用等边六边形实现完全覆盖(尽管这在几何上是不可能的)。

那么它是如何实现的:

实际上,这是一块放置了物体的平面。然后,根据摄像机位置,在着色器中重新计算顶点(所有物体必须共享相同的弯曲子图或具有相同数值的着色器代码,以保持视觉一致性)。据我所知,这种技术已在《动物森友会》中使用,只是没有如此大幅度的调整。

好,这样我们就得到了一个看起来像球体的弯曲平面。下一个挑战是让它能够正确旋转;旋转只需在X轴和Y轴上移动平面,同时保持摄像机静止即可实现。为了实现平面的循环,我生成了8个额外的平面副本,并在穿过边缘时将它们传送(这部分当然可以通过顶点魔法或更少的克隆体来做得更好)。

下一个挑战是阴影问题:顶点被重新计算,但法线没有被更新。为了计算新的法线,我们需要获取顶点的两个相邻点,然后用相同的逻辑弯曲它们,并利用结果计算新的法线。这样我们甚至能正确显示来自上方云朵的阴影。

最后要做的是点击地图上的节点。由于物体实际位置与视觉位置差异很大,仅通过鼠标进行射线检测是行不通的。因此,我使用一个大型球体碰撞器来检测鼠标在球体上的位置,然后反向计算它在平面上的对应位置,并找到半径内最近的节点。

还有一些工作待完成(视觉特效支持较差,平面边缘的水波存在一些伪影)。但在我看来,效果已经相当不错且引人注目了。

感谢阅读!如果您喜欢所看到的内容,不妨将《Tile Crawl》添加到 Steam 愿望单:点击此处