我正在使用跑步机写这篇文章。我的 ADHD 如果我不在早上第一时间锻炼的话,运动就很难开展,哈哈。我通过亚马逊购买了一台便宜的跑步机并设置了我已经使用的液压桌,用来当作鼠标pad时。将桌子抬高到大约我肚脐高度前面我的电脑,放置鼠标和键盘。在前面的小屏幕垂直调整,使我能够看到它们做什么。一楼有些东西比健身房或瑜伽更好,因为我通常会在一年几月之后逐渐停止去健身房或瑜伽。就像我通常一样。
我在几个月前飞往波士顿参加PAX East展会之前花了大约一周左右,每天行走2-3小时,现在我恢复了一些时间之后又重拾了锻炼。
我在前一篇文章里稍微展示了一点新农场地形。但是这里是关于以前从未提及的新地形有趣问题和解决方案。
GPU Instancing:如何将2,583种植物减少至3次绘制
我的3D建模师开始将地形测试模型传递给我,始自2025年11月或前。在这之前,他是一名原来的游戏粉丝。他改进了Cornucopia logo并在几乎2年前将其重新设计,仅仅因为他想。通过时间,地形建模师逐渐变成几乎是游戏的唯一一个积极参与者。虽然在过去2年他一直是游戏的合作者现在已成为游戏最重要的角色。如今除了我外,没人能做游戏。
在2026年3月正准备参加PAX East前,他将农场地形重新设计发送给我。我们之前计划并在几个月前进行了脑 шт storm。完整的设计比之前还要详细的多,而且包含了新的连接的洋帆区。他每天都发来地形修复和改进。花瓶、盆栽、地覆盖、海洋区的白石,甚至一些岩石中间的植物。最近他甚至在树林中间添加风景线式的斜向图片,包括不同深度的松树和橡树。游戏支持的区域包括温带农地、海洋区域、洞穴环境、岩石区域和小镇。所有这些区域现在都有自己的属性并包含了丰富的环境细节,这些细节以前都缺失了。
他以前总是问我“能多加多少?”然后尽力扩大项目的内容和效率。他很努力地试图将地形细节和性能增加到我无法实现的水准。然而,我不断地想着地图的GPU、帧率和各个终端设备的性能需求。
问题
游戏中每个单独物体都需要向GPU发起“绘制”请求。每个花朵,每片草地,各个花的种子,都需要一个单独的数据包“请绘制这个”
2,583++种
在质量较好的游戏电脑上,问题也罢了。但游戏也需要在游戏机和便携式电脑上表现良好。而这里的问题在于,我们需要在这些设备上不仅要考虑屏幕上的三角形数量,而且也需要考虑单独的物体数量。
在这里,我看着这个优良的舞台场景,有丰富的细节,最终能够给这些关卡添加了环境细节,并在我脑中产生了一个想法。“因为如果有那么多种植物,那么我必须要告诉他减少数量,才不会引起问题。”我一直以来都不想这样做。
思路大转机
我试图在GPU上使用标准GPU Instancing来解决这个问题。将所有植物在 GPU 上绘制一次然后使用相同的位置和其他信息就行了。但这意味着它们必须是相同的几何体。这很方便,可是这些植物都是独特的并且来源不同。这使得我无法在一个大块中组合它们。
但我有一个很好的想法。这些植物根本没有交互作用的必要,因为你不能选择它们、接触它们,甚至可以通过它们。它们在游戏中是静止的并且不需要有任何物理性质。只有同样的颜色纹理可以解决问题了。因此,只要告诉GPU,让这些植物组合成一种地形块就可以了。
而唯一一个需要单独地绘制的植物是树的躯干和其他能影响玩家的物体。这些东西就不在这里了。我们已经有一个工具,去组合植物物体了。这种工具在 Unity中使用时,很容易让我们把植物物体组合到一起。然后我只需要选择一个父物体,并点击一个按钮,工具就会做完了的。将地形分成一个100X100的网格,而我选择这个尺寸是因为它大概能将屏幕上占据的面积减少一半。这样GPU就可以自动忽略那些屏幕外的植物。这一过程对于我们的项目来说非常重要,它可以减少GPU的负担。并且,我们的游戏使用了大部分 16 位的索引,从而减轻了GPU的负担。
在这一过程中,就很容易在屏幕上看到植物和树的顶端是完全静止不动的,只有些树叶在轻微地摇动。然后在GPU上使用步长函数来计算植物的位置,并且GPU本身决定是否要绘制。GPU慢慢地绘制每一个植物,进而绘制整个景物,而玩家却感受不到GPU的负担。
评论 (0)