受《动物森友会》启发:Unity 中实现六边形星球贴图弯曲的着色器技巧

AI3D 发表于 09-03 浏览 0 分类 创作分享

Building Hexagon Sphere Using Animal Crossing-Inspired Trick
来源图像

UNSUNG,即将推出的回合制战术 Roguelite《Tile Crawl》的开发者,最近分享了一下他们如何借助一个受《动物森友会》启发的方法,把一堆六边形变成了游戏中的星球。

《Tile Crawl》的每局地图原本就围绕六边形网格构建,因此团队希望作为游戏元进度载体的这颗星球也能看起来一致。他们不想使用五边形,并决心用大小相等的六边形去覆盖整个球体,尽管从几何学上讲这是不可能的。

其实,它只是一个平面,上面叠加了物体。窍门在于,顶点会在着色器中根据相机位置重新计算。为了让视觉保持一致,所有物体都要使用相同的弯曲参数设置,或共用一套数值匹配的着色器代码。

“好吧,这样我们就得到了一个看起来像球体的弯曲平面。下一个挑战是让它能正常旋转;我们通过让相机保持静止、只把平面沿 X 和 Y 轴移动来实现旋转。为了让平面之间无缝循环,我会再生成 8 个带有对象副本的平面,并在跨越边缘时把对象传送到另一边(这部分显然可以靠顶点魔法或更少的克隆体做得更好很多)。

再一个问题是阴影:顶点被重新计算了,但法线没有;因此要计算新法线,需要取一个顶点的两个相邻顶点,用同样的逻辑弯曲它们,再用所得结果推出新法线。这样我们甚至还能让云层在球体上方投下正确的阴影。

最后要做的是点击地图上的节点。由于物体实际在场景中的位置和视觉位置差别很大,直接从鼠标进行射线检测是行不通的。所以我用一个大球体碰撞体来检测鼠标在球面上的点,再反向重算它在平面上对应的位置,并在半径范围内找最近的节点。

还有一些待办问题(对 VFX 的支持不太好,水波在平面边缘也有些伪影)。但在我看来,效果已经很不错,也很出挑了。”

《Tile Crawl》将空间与解谜式战斗结合自由探索,但有一个限制:你只能携带六件物品,且每次使用都会让它们损耗。你可以在此将它加入愿望单。

我们经常刊登独立开发者的技术拆解文章,介绍他们如何构建游戏的不同部分。例如,你可以看看 Jarl Frode 是如何借助计算着色器实现 2D 草地渲染的,也可以看看 Quad Head 如何使用 C# 在 Godot 4.6 中发布一款多人游戏。

如果你还想看到更多深度内容,我们还有一整个访谈栏目,在那里我们会与开发者聊项目、开发流程、自定义工具以及营销方面的经验。

相关链接

原文链接:https://80.lv/articles/building-hexagon-sphere-using-animal-crossing-inspired-trick

喜欢这篇内容吗?