图形引擎实战:开放世界游戏制作分享

想象一下你站在一座山顶,眼前是一片广阔无边的土地,山川、河流、城镇、森林尽收眼底,而这些地方你都可以自由地去探索、发现和体验。这就是开放世界游戏的魅力。

开放世界游戏实际上是一种自由探索和自主选择的游戏。它提供了一个庞大而开放的环境,玩家可以按照自己的节奏和兴趣去探索,而不是像传统游戏那样有着线性的流程。线性游戏中的玩家被写好的剧本引导着一步步走向终点,所有的故事和场景都是预先设计好的,玩家只能按照流程去推进。对比传统线性游戏,开放世界游戏赋予了玩家完成任务的自由,让每个玩家的旅程都独一无二。

开放世界游戏的研发中,有很多开发经验和问题可以探讨,今天我们对开放世界关卡制作中的模型资源制作中的一些部分做一些分享。

  • 细节层次(LOD)优化在游戏的制作过程中,为了保持性能,我们需要为每个模型创建多个细节层次(LOD)。这些模型在玩家靠近时显示高细节版本,远离时显示低细节版本。在实际工作中,我们通过反复测试和调整,找到了不同LOD之间的最佳平衡点,这使得我们在保持画面质量的同时维持性能。在开放世界项目的制作过程中,我们通常会给模型LOD设置为LOD0、LOD1、LOD2三层,某一些非常必要的建筑会再增加一层LOD3,以进一步的降低模型的多边形数量。比较小或者不重要的场景物件,我们只设置LOD0、LOD1,再远就直接剔除掉。而类似是树这种大量重复,并且可以更加简化的物体,在远距离的情况下,我们把它简化成billboard,并通过GPU instancing来提高渲染效率和性能。

GPU instancing示意

建筑一类的物体,在LOD0、LOD1的阶段,我们用材质去对建筑进行拆分,把整体的模型按照材质拆分成多个子模型。这样拆分可以更有效的对同一材质对象进行批处理,也可以更方便的管理模型和贴图,并提高内存的利用率。

到了LOD2这一层级,我们把拆分的模型整体化、简单化,用最少的多边形来构造该物体。这一层级就不再拆分使用不同的纹理了,我们把大量的LOD2层级的贴图都整合到了一张贴图上,做成贴图合集。这样的处理有着减少渲染调用次数和内存占用,优化纹理采样性能的好处,并且还可以简化渲染管理,让游戏开发更加高效。

在超远视距下,大型的模型乃至城市、大陆等也都会变得很小。对于这种距离的模型,可以使用HLOD等手段把整个城市或者是大陆处理成一两个简单的整体模型,这样远处的山体、城市、部落、大陆等大型模型群都可以进行块状处理。可以减少多边形数量并且保持远景的光照和阴影效果一致,提升渲染效率和画面质量。这样的远景可以使用引擎合并的颜色贴图,当然也可以不使用贴图,用顶点色来代替贴图也是可以的。

HLOD可视化

除了地面上的这些物体,地形也是不可忽视的一环。近距离的地形我们采用Terrain而非地形转成的模型,中距离和远距离的地形使用Terrain转出的低面数模型和多张地形纹理合成的单张纹理。远距离的资源是否需要在中距离的资源基础上再进一步的进行裁剪取决于是否能够满足美术效果的需求。这种方法能够在保证视觉质量的同时,提高游戏性能。

通过在不同距离使用不同复杂度的模型,LOD可以显著减少渲染所需的计算资源,提升游戏的帧率和整体性能。并且低复杂度的模型占用的内存更少,这对于开放世界游戏非常重要。

地形疏密示意

  • 模块化设计

在开放世界游戏中,世界规模通常非常庞大,因此采用模块化设计可以大大提高工作效率。我们对地形的部分进行分块处理,把大的地形切分成512*512的小块,每个块可以单独处理并组合在一起形成完整的地图。中、远处的地形,我们采用Terrain转成的模型,并给模型减面制作LOD以减少渲染所需的计算资源。纹理方面,近景的纹理我们使用两张splat图来混合我们的地形纹理,以保证近景的视觉质量,而中、远景的地形纹理则是对Terrain的纹理进行混合后的单张纹理,在保证视觉质量的同时节省渲染资源。

当然这种对地形的分块做法也会遇到一些问题,比如如何避免让玩家在移动过程中注意到明显的地图接缝或是地图边界。对于这个问题,我们有不少的处理手段。我们可以通过对边界处的纹理进行合理的混合,比如使用渐变的纹理来混合草地和沙地等材质来进行平滑的过渡,模糊掉地图的边界线。对高度图进行精细的调整,保证地图的模块与模块之间的高度变化是渐进的、不突兀的,也是很有效的手段。对于不太好处理的边界,使用石头、树木、灌木、建筑等环境装饰物来遮挡不自然的过渡区域也是非常好用的办法,这些装饰物除了能掩盖不自然的边界,还可以装饰环境,增加环境的真实感。

地形间不同区块的示意

模块化设计在开放世界游戏中的应用,不仅提高了开发效率,还确保了游戏世界的视觉一致性和细节丰富性。通过预制件、程序生成和手工调整的结合,开发者能够创建出庞大且充满活力的世界,为玩家提供沉浸式的游戏体验。这些实际工作经验和技术细节,对于希望开发类似游戏的团队具有重要的参考价值。

在开发开放世界游戏时,实际的工作经验和技术细节对于创建丰富且高效的游戏世界非常重要。这些经验不仅提升了开发效率,还确保了游戏的整体质量并且提升了玩家的游戏体验感。

欢迎加入我们!

感兴趣的同学可以投递简历至:CYouEngine@cyou-inc.com

#游戏引擎##引擎开发工程师#
全部评论
简历挂了捏
点赞 回复 分享
发布于 09-03 17:18 陕西
给个offer吧哥😋
点赞 回复 分享
发布于 09-03 17:46 浙江

相关推荐

头像
10-10 20:57
门头沟学院 Java
投递英伟达等公司10个岗位
点赞 评论 收藏
分享
5 3 评论
分享
牛客网
牛客企业服务