首页/编程/制作内插:模拟气候灾难
编程

制作内插:模拟气候灾难

2020-10-01T17:18:56 + 02:00

Endzone的动态辐射和湿度 - 一个分开的世界。

牛蛙娱乐1989年的人口众多是第一个支持的动态环境的游戏之一。玩家可以筹集和降低地形,创造平坦或岩石的景观,这影响了世界上建筑结构的NPC行为。玩家不会直接控制NPC,但是通过Terraforming创建一般任务或控制它们。在游戏之后,人们还可以产生大型火山,地震和其他灾难来改变游戏内的环境,这会再次改变NPC与环境互动的方式。人口稠密的II(1991年)和人口:开始(1998年)继续建立有一个影响整体游戏的动态环境的想法。

2011年后,另一个标题拿起这个想法:从Ubisoft的灰尘。同样,玩家将改变环境,为生活在游戏世界中的NPC而不是直接控制他们的全球任务。来自尘埃和人口众多的球员,球员与蚂蚁农场进行互动的感觉:改变环境,看看其居民会发生什么。

Endzone - 一个世界分开使用与NPC的相同基本概念没有直接可控,并且在游戏进展时不断变化的动态环境。 Endzone中的环境而不是给予玩家的能力,而是由游戏的系统改变。通过这样做,游戏玩法转身并不再是改变环境,因此NPC文明可以蓬勃发展,但是关于处理NPC对环境变化的反应,因此他们可以在这个恶劣的世界中生存。

地图上的不同湿度值。雨是由孵化区标记的。

Endzone的灾难
Endzone具有许多球员必须回应的灾难。既有直接灾难,如饥饿,口渴和疾病以及间接的环境灾害,如干旱,辐射,污染的雨水和沙尘暴。如果玩家没有成功地抵消环境灾害,他们将最终导致上述直接的灾难。玩家必须分配NPC来播种种植和食物收集,从湖泊或雨水中收集水以及其他重要的东西,NPC需要生存。如果这些事情中的一个或多个失败或不足,则NPCS死亡,并且游戏丢失。

开发开始时,很明显,环境应尽可能深刻地模拟,因为它是游戏的主要特征。应在本地模拟湿度和辐射,而不是抽象的全球价值。同样适用于沙尘暴和其他环境影响。在游戏过程中,一切都应该是动态和变化。此外,所有视觉效果都应反映那些本地变更,并充当玩家的反馈。

模拟辐射和湿度
游戏世界被分为一个网格来模拟环境。电网的每个单元格宽2米,可以具有“可行性”,“ismountain”,“是iswater”等的属性。存储在位域中。另外,每个细胞也具有用于辐射和湿度的值(后者是在开发期间发生的巧合。稍后更多)。在映射生成的地图生成过程中设置了一次,然后在生成新实体时,只会在小型本地区域更改,或者可用实体被销毁。当玩家创造或摧毁建筑物或植被时,这会发生这种情况是(de)在游戏过程中产生的。

另一方面,辐射和湿度始终同时为整个网格模拟,每秒至少四次模拟。随着电网为大地图(2.560.000个细胞)而变得相当大的,这很快就会成为CPU瓶颈。我们调查了多线程和SIMD,但很快决定这不是我们想要采取的路径,因为我们的最低目标CPU是第二代I5,它需要对NPC行为等其他事情的所有权力。我们的最低目标GPU是一个带有计算的GTX 760,但是但是但是。因此,所有环境数据都在GPU上计算,因为它是这个问题的完美工具。

Endzone的场景…

在映射生成期间,CPU填充了具有初始辐射数据的2D阵列并将其发送到GPU。此时,GPU现在完全收取管理与辐射相关的一切。基于可能影响辐射的细胞和特殊建筑物的目前的天气,它会随着时间的推移而增加或减少辐射。然后,在GPU中生成CloudMap每个帧。然后使用CloudMap来定义云位于地图的地图以及它应该下雨的地方。计算座椅提取该CloudMap,检查电池上方的当前云辐射,最后更换云下方的地电池辐射相应。 CPU然后偶尔地从GPU中获取辐射数据,然后以异步方式从GPU中获取辐射数据,因此游戏世界中的实体可以对其作出反应。

当在开发期间发生了真正酷的事情时,正是在这个阶段:达到这一点,我们只想模拟当地辐射,从未想过其他事情。一旦我们有了计算器,我们注意到我们发现我们也可以自由地自由引入和模拟湿度,因为它大致与辐射相同。由于着色器并不真正关心它们在浮动或浮动2性能上运行,我们只需要在我们的代码中改变两条或三行,我们的云不仅会在地面上改变辐射,他们也会改变新介绍的湿度值与(几乎)没有打击性能。这是游戏前进的一个意想不到的重大步骤,因为它打开了基于地面湿度模拟植被的可能性,后来成为了一个独特的endzone卖点。课程学习:永远不要低估机会的力量。

…具有活性湿度热图。

使用可用数据的游戏玩法
现在,GPU和CPU都可以使用辐射和湿度的数据,我们可以开始利用它。

要模拟和处理游戏世界中的所有对象,我们使用自定时定制的实体组件系统(ECS),该系统(ECS)是由划痕构建的,以匹配我们的特定需求。 ECS负责使用环境数据,让实体和游戏力学及时对数据作出反应。

在CPU侧,树木,作物,草药,蘑菇和被认为是游戏内资源的各种各样的实体,将使用数据动态地改变其生长速度和放射性污染。如果基于湿度的实体位于一个非常潮湿的区域,它们将增长更快,这导致资源生产更快。另一方面,如果玩家没有采取行动和建造灌溉厂,那么位于干燥地区的实体将开始晾干。然后,灌溉厂将告诉计算器增加径向区域内的湿度。玩家还必须确保提供给灌溉植物的水没有污染辐射。否则,由此产生的资源将受到污染,这导致NPC辐射,不孕和生病。

还有其他机制使用NPC等可用数据在辐射区域中徘徊,防护服,碘丸,雨池,屋顶等。但这些是本文的范围。

…具有非常高的辐射,花和局部色差。

视觉反馈
在GPU侧,我们使用可用数据以尽可能多的视觉反馈。植被,地形,空气/灰尘和水都会视觉对抗湿度。另外,植被也会对辐射作出反应。

Endzone中的每个植物都有一个特殊的湿度图,使我们能够无缝地改变“郁郁葱葱的绿色”来“干涸”。要实现我们使用3个频道:

  • 红色:一件不能弄干的所有东西的掩码,也用作颜色查找索引。
  • 绿色:可以弄干的所有东西的面具,也适用于颜色查找索引。
  • 蓝色:干燥地图。

首先,通过使用我们湿度图的红色通道作为面具,可以呈现无法干扰(即分支机构)的事情。在这样做的同时,我们也使用红色通道作为y指数作为颜色查找纹理来调集结果。这是第一层,它将永远是可见的。

在第二步中,我们现在使用与之前但使用绿色通道作为Y指数的完全相同的方法,渲染可以干燥(即叶子)的所有内容。唯一的区别是我们现在在获取颜色查找纹理时,我们现在另外使用湿度值作为x索引,以引入不同颜色的不同湿度值。这是第二层。

最后,我们将湿度值应用于干燥地图,并使用结果将第二层与第一层组合。

......湿度低。

结果是一种动态地改变其颜色的湿度,并随着越来越多的干燥而失去叶子。

关于游戏世界中辐射的可视化,我们将三件事定居为视觉反馈:

  • 在高辐射区域的动画世界空间色差。
  • 如果相机看起来高辐射区域,屏幕边缘效果。
  • 辐射区域增加和更丰富多彩的花卉人口。

在本文中,我们只会看最后一点:基于辐射的产卵鲜花。
鲜花直接集成到我们的草渲染解决方案中。与其他游戏一样,我们的草在GPU上完全计算使用计算器。优化性能,我们不会呈现大量的小草丛,而是放置大块,然后使用图表纹理进行颜色和形状变化。然后,我们使用地形高度图和GPU上的建筑占地面积掩模,以在不应呈现的区域中移除草。

树的湿度图和颜色查找纹理的例子。

通过使用辐射值抵消Y轴上的草UV并挑选地图集的不同部分来实现花卉生长。最后,我们通过使用草的世界空间位置访问颜色查找纹理,以伪随机方式使用伪随机方式。
未来
花卉方法很可能会变为植被部分中提到的相同的干燥地图方法,因此辐射变化时花卉可以动态地生长,不会弹出。
Endzone是我们使用计算器的第一个游戏。在与他们合作一段时间后,阅读更多关于主题和观看会谈的信息,我们已经在考虑在未来的项目中我们如何更多地利用它们。例如,摆脱Unity的遗留延期渲染器并编写自定义群集前进/延迟渲染器,而是听起来像是未来项目的有效候选者。

GPU驱动的地形是另一个有趣的话题,因为它可以允许快速的行动。自从我们的指针以来 - >场景交叉点测试已经基于GPU的深度缓冲区,我们只使用最小的射线 - >CPU的网格交叉测试和物理学,这是我们将来会留意的东西。

至于湿度和辐射的模拟:在计算这些值时,我们只使用两个可用的四个“通道”。因此,有两个环境值的空间,而不会影响太多的性能。我们可能或可能不必在从GPU获取数据时介绍某种包装。否则,带宽可能成为旧硬件上的问题。

草网,纹理地图集和花颜色查找纹理。

结论
我们设法创建一个动态环境模拟,实时运行七年历史,仍然具有所需的性能储备来实现周围的游戏。通过使用计算化器来实现性能关键计算并在CPU上使用异步数据来实现这一点。在早期组合在石头上有一些基本的设计决策也很重要。创建基于网格的游戏的决定确实有助于,因为它是对计算器的完美匹配。此外,游戏玩法主要发生在平面上,相机始终俯视,这也有助于在某些区域的仿真区域,以及创建视觉反馈时。


Wolfgang Reichardt
联合创始人& Studio Lead

Wolfgang于1999年开发了他的第一场比赛,并于2014年共同创立了。当他没有在艺术家编写代码或投掷Polycound和TextureBudgets时,他修理老球机,老朋友汽车和复古PC。每当他有时间时,他也掌握了游戏开发的课程。

关于作者: 7. 10月20日
类别:
去顶级