黑神话爆火,借机科普 3D 游戏制作常识,你了解多少?

黑神话爆火,借机科普 3D 游戏制作常识,你了解多少?

1. 3D游戏开发常识

像黑神话这类动作游戏都是3D游戏,可以理解成一个虚拟的游戏世界,里面有一个三维坐标系,游戏里的所有物体都在里面运动。

玩家在任意时刻看到的只是游戏世界的一小部分,随着玩家的行走和转身,游戏世界也在不断变化。这个世界被称为“摄像机视角”,也是 3D 的。

然而目前的显示设备都是2D屏幕,因此需要将摄像机视角的3D图像转换成2D图像才能在电脑、手机、平板、游戏机等设备上显示。

500

2D屏幕显示,3D相机视角,整个虚拟的游戏世界

游戏是动态的,玩家希望看到流畅的画面,就像看电影一样,越逼真越好,这就需要双缓冲机制。

我们屏幕上显示的东西,都是经过显卡(GPU以前就是显卡,后来加上了计算功能)处理的。一个2D的图像内容被放在“显存”中,然后由显卡硬件调用,就会显示在屏幕上。呈现的画面被称为“一帧”。如果在更新画面时,从上到下逐行扫描更新这一帧,就会有上下不对齐的感觉。实际操作时,会在显存中准备另一个大小相同的缓冲区,计算“下一帧”的图像数据并写入其中。一切准备就绪后,屏幕图像硬件调用的指针就指向过去,一下子全部更新到屏幕上。原来的一帧变成了计算下一帧的图像缓冲区。如此来回切换,屏幕画面就像电影一样前进。

实际操作上,按照人眼的感受,30帧每秒的“帧率”是比较流畅、可以接受的,帧率再低一点,画面就会跳来跳去,如果帧率从30继续提高,人眼会觉得画面更流畅。普通人60帧就满足了,不需要更高,有些玩家为了玩《黑神话》追求硬件,或者调整设置达到60帧率,帧率还能再提高一些。游戏发烧友会追求120帧,其实差别不大,只有对画面极其敏感的职业电竞选手,才会追求更高的帧率。

因此游戏显示帧率一般在30~60帧之间,60帧为优化目标,30帧为优化底线。偶尔帧率低于30还可以忍受程序开发,但频繁出现就麻烦了。另外,如果一秒钟内帧率波动很大,出现“掉帧”就不好了。你不可能300毫秒只有3帧,剩下的700毫秒只有27帧。有时候在Switch等游戏硬件上30帧比电脑上的60帧感觉更流畅,因为帧率稳定,掉帧少。

以上就是关于游戏画面从何而来的最基本的知识。然而,想要了解游戏世界是如何构建的,还需要更多的知识。

虚拟的游戏世界必须存放在“数据结构”中,游戏世界一般模拟人类生存的世界,开发者总结了几类各具特色的数据结构。

地形、天空盒、植被、水、粒子效果、场景物品、角色、布料、光源,游戏世界就是由这些东西组成的。每一类都有自己的特点,相关的数据结构和处理算法都需要专门设计。

天空盒(或天空球体)可以理解为一个覆盖整个 3D 世界的大方形盒子或球体,盒子上附有一张天空图像。一些天空算法可以让天空图像动态变化,使效果更加自然。这个盒子很大,很高,甚至无限高,玩家在地面移动时会感觉到天空是稳定的。但请注意,它并不是真正意义上的大盒子数据结构,我们后面讲渲染的时候会解释。

地形是记录地表起伏的地图,是游戏世界中最基础的数据。植被是地表上的草、树等覆盖物,非常庞大游戏程序开发,有重复,但也必须体现变化。水体有特殊的运动规律,有透明度、反射、波动等属性。粒子特效实现烟雾、火焰、沙土、尘埃、攻击波等效果。场景物体定义游戏世界的活动空间,包括建筑、石块、土壤、道具等各种刚体物体。有些可以远观,有些可以进入,这就需要更细致的三维建模。

其实,植被也可以理解为物体,但由于数量众多,需要不同的高效处理算法,所以专门将其定义为一个类别。

角色是玩家在​​游戏过程中关注的重点,角色的属性是最复杂的,需要更细致的定义,3D动作游戏中很多角色都有漂亮的专属动作,定义角色的一个重要手段就是骨骼关节系统,关节可以扭动,角色可以变换成各种形态。

角色也有衣服、配饰、面具等,有时衣服有好几层。这些也需要特殊的数据结构来处理,可以用布料来表示衣服。

最特殊的一种东西就是光源,有火把、蜡烛等光源,有时也有外部光源,相当于太阳等平行光。由于光可以反射、折射、吸收、增强,所以光的处理非常复杂,是图形显示最需要计算能力的算法。事实上,所有物体的颜色和亮度值都是以光源为基础的。

500

图中有哪些数据结构?

各个数据结构的处理在计算机图形学中都有非常深入的研究背景。但是随着技术的发展,这些重要数据结构的处理算法基本都成熟可用。依托这些图形算法,3D游戏开发才有了基础。3D游戏在90年代就有了不错的效果,软件和硬件算法也不断完善。现在游戏的效果已经有了很大的提升,有时候逼真到让人害怕。了解游戏开发的基本知识,就会明白游戏对技术进步的推动作用。

但3D游戏开发涉及到的数据类型和算法太多,普通的开发者并不具备从零开始实现的能力,就连中小型公司也做不到。

幸好还有游戏开发引擎,比如 Unity、Unreal。游戏开发引擎将相关的数据结构和算法打包起来,直接提供一个框架给游戏开发者使用。开发者按照引擎的使用规范,定义游戏世界的数据,设定游戏规则,就可以编写游戏了。Unreal 和 Unity 就像是编程更常用的 Visual Studio,是一个集成开发环境。

除了游戏,Unity 还可用于艺术、建筑、汽车设计、影视等领域,这些领域都是以 2D 形式展示 3D 模型和 3D 世界。引擎开发公司为 Unity Software,其中国子公司为 Unity China。Unity 的中文版本称为“Unity Engine”,有自己的特色,与英文版本不同。Unity 是最常用的游戏开发引擎,开发的游戏数量和类型最多。Unity 每年都会有大版本更新,如 2019 版、2020 版,直到 2024 版,小版本更新会更加频繁。

Unreal中文名为“玄幻”(不过没有专门的中文版),现在比较流行的有虚幻4(或UE4)和2020年推出的虚幻5(或UE5),《黑神话》就是用虚幻5开发的。虚幻引擎是由著名游戏公司EPIC开发的,旗下有《堡垒之夜》、《战争机器》等成功的游戏作品。为了推动行业的发展,EPIC开放了虚幻开发引擎的源代码,和开源不一样,使用还是要付费的,也有赚钱的目的。和Unity一样,虚幻引擎也可以用在影视等其他领域。

相比于 Unity,虚幻引擎率先实现了一些独特的高级图形算法(《黑神话》中就用到了一些,比如后面会介绍的 Nanite 和 Lumen),可以更好地显示一些游戏效果。但 Unity 也会在后面实现这些算法,所以不能说两者有区别。虚幻引擎还有 game play,也就是一套定义游戏规则和角色动作的代码框架,而 Unity 没有。但这并不意味着虚幻引擎就更好。或许开发者认为 game play 中定义规则的方法对某些游戏来说效率不高。

个人开发者和中小型公司一般使用Unity或者虚幻引擎开发游戏,大公司也会使用。不过大公司也有自己的引擎,代表着公司的技术实力。

还有DCC(数字内容创建)软件和建模软件,例如Blender,3DMAX和Maya,它们生成业界最常见的FBX模型文件。

以上是关于游戏开发的一些概念性常识,大致就是如何开发游戏,不涉及具体的数据结构和算法。

2. 游戏开发的基本算法概念

游戏世界中物体的基本表现方式是三角网格(Mesh)。

500

如图所示,三角网格可以模拟物体的表面,而物体可以定义三维形状。从上图我们可以感受到顶点密度越高、三角网格越多,越能模拟出物体的表面。三角网格表示的基础是任意多边形都可以被切割成多个三角形。还有其他网格类型,比如四边形网格(加上一些三角网格),但最常用的是三角网格,《黑神话》中应该就是这种网格。

一个三角形网格需要存储顶点的三维坐标,三条边,顶点的顺序可以区分正反面。还有一些其他属性,比如法向量和材质属性。

玩家在观看游戏画面时,往往意识不到三角形网格的存在。这是因为最吸引人眼球的是物体表面(也就是三角形内部)的“内容”,而不是顶点。表面必须填充各种颜色,不能只是单纯的三角形,那样太难看了。这就是三角形内部的“纹理”,其实就是贴在三角形上的一张图片(图片的一部分)。显示时,不但要贴图片,还要结合光源计算里面的颜色。

通过三角网格表示和纹理表面映射,一个物体看起来非常真实。游戏中有近景和远景,对于同一个物体,可以设计不同精度的模型,近景精度高,远景精度低,分为几个等级。但这些都是静态的,游戏中很多物体的形状和角度是会变化的。

物体如何变化、碰撞时如何反应,需要“物理引擎”来实现。游戏世界的物理一般与现实世界不同,有的夸张,有的简化。有的极力模拟现实世界,做得很细致,难度很大。主要还是以现实为主,但效果未必好。只要游戏世界的效果好,可以灵活处理。有些物理效果明显不符合牛顿定律。但没关系,人们很容易接受游戏世界的物理规律,这比现实世界更有趣、更好玩。

这给计算机编程提供了极大的便利。只要物理引擎定义得自洽,效果就是它的样子,只要玩家接受就行。如果是模拟现实世界,就必须非常仔细地定义和模拟,很难调整到贴近现实。当然,物理引擎也是基于现实世界的规律,大致符合人的物理直觉,不能搞得不可理解。

500

比如黑神话中悟空的棍风扫过几片草叶,草叶的弯曲就显示出棍风的存在。如果是真实物理的话游戏程序开发,那就麻烦多了。在物理引擎中,可以简单处理,给草叶加上一个有方向性的扰动,根据扰动力计算出各个顶点的偏移量,模拟出效果并不难。有时候这个处理很简单,不需要物理引擎就可以做到。从原理上讲,真实世界中棍子扫过的时候不可能出现太大的风,但在游戏中,可以直接定义一个数值,模拟出夸张的效果。

物理引擎并不是游戏引擎的难点,游戏开发引擎都会包含它。NVIDIA 提供了物理引擎,这是它的风格,它会寻找任何需求,并在早期就将其内置到开发套件中。Unity 早就内置了 NVIDIA 的 PhysX 物理引擎。

PhysX有刚体碰撞、粒子系统、布料模拟等。粒子系统可以模拟烟雾、水流、火焰等,布料模拟就是处理衣服、旗帜等动态效果,效果比较贴近现实。可以理解为NVIDIA PhysX算法的目标是贴近现实,并不是专门用来做游戏开发的,不过用在游戏中也是可以的。

虚幻5默认的物理引擎是EPIC开发的Chaos,之前都是用PhysX,对于一些游戏项目来说Chaos更适合,因为它的目标不是追求真实感,而是游戏效果。

在物理引擎的作用下,游戏世界接受玩家的输入并能不断演化,按照玩家的视角将3D的游戏世界呈现在2D的界面上,这是游戏开发的核心任务,处理显示问题。

相关专业术语有“渲染”、“渲染管线”和“着色器”,要理解这三个术语,首先需要介绍一下3D动作游戏的硬件特点,CPU+GPU,其中GPU起着主要的计算作用。

像《黑神话》这种注重视觉效果的动作游戏,GPU 是必须的,低端不行。理论上,单靠 CPU 就能运行这些物理引擎和 3D 世界转换成 2D 显示的算法。早在 90 年代初,就有《侏罗纪公园》、《终结者 2》等特效电影,但那时还没有 GPU。但这些特效制作时间很长,1 分钟的显示可能需要一周时间才能制作完成。3D 动作游戏显示需要实时计算,因此需要非常强大的 GPU 来加速计算。

很多人熟悉 CPU 的串行编程逻辑,但了解 GPU 编程的人却少之又少。GPU 有成千上万个计算核心,可以并行使用以加速计算过程。但细节很多。这些核心并不完全相同,而是分为几类,每类都有自己的专长。GPU 的内部架构也不简单。

Shader可以理解为运行在GPU上的并行加速程序,Shader有很多种,分别完成顶点位置、像素颜色计算等任务。为Shader准备好输入数据,Shader会将计算好的数据写入显存和主存。

游戏开发引擎提供了各种各样的着色器,开发者也可以编写自己的着色器进行特殊处理。但单独的着色器相当于一个只有一些子功能的程序,无法完成整个任务。

这时候就需要“渲染管线”了,管线安排了一系列的处理动作,渲染管线可以理解为CPU+GPU编程,是一个软硬件流程,每一步都会调用CPU或者GPU,中间会有多个不同的shader完成主要的计算,CPU处理逻辑,准备数据。

渲染管线是将3D游戏世界的游戏数据转换成2D屏幕上的画面的过程。游戏开发引擎提供了渲染管线代码,程序员可以修改。它会计算出现在“相机视图”中的物体,切断视图外的物体,并处理边缘。它需要确定场景中物体的遮挡。对于每个物体,计算2D显示的颜色值。

一种特殊的算法是天空渲染,其实就是 6 张“参考图”作为天空采样的纹理,对应立方体的 6 个面。渲染天空时,会根据当前的位置和方向计算天空颜色值。从这个意义上来说,“天空盒”其实并不存在,也不存在于场景文件中。

500

一款游戏的渲染管线写好之后,图形显示部分就准备好了。但是如果换了 GPU,可能就需要不同的渲染管线。如果 GPU 不够强,一些高成本的着色器就无法运行,必须换成低成本的着色器,帧率和画质都会降低。《黑神话》程序第一次启动时会进行“着色器编译”,就是根据机器的 CPU+GPU 组合,编译出合适的二进制代码,后续启动就不需要了。

这就是为什么像《黑神话》这样的 AAA 游戏对 GPU 性能的要求很高。如果 GPU 无法运行游戏的最低着色器要求,游戏将无法运行,所以最好不要玩它。着色器计算过程无法被 CPU 取代,这太慢了,让人无法接受。

需要注意的是,渲染管线只负责显示相关的计算,比如游戏玩法、物理引擎等都是其他管线,也可能调用GPU。渲染是指计算并渲染一帧画面,并将画面数据写入显存的动作。渲染是一个动作,渲染管线是一个过程。

介绍到这里,3D游戏开发的主线就清晰了。不过,还缺少一个最重要、最复杂的部分:光照模型。场景的外观由一个或多个光源的光照效果决定。计算非常复杂,还与物体的材质有关。物体的材质其实就是物体与光相互作用的性质。物体是看起来像草、树还是水,是由光的吸收、反射和透明度等属性决定的。

物体的颜色并不是其固有属性,它有一套相对复杂的物理理论,涉及到漫反射、镜面反射、微表面理论等概念,在游戏开发中被称为基于物理的渲染(Physical Based Rendering),用于处理光与物体的相互作用2d素材,光照模型也是渲染中的一个重要概念。

简易光照模型就是只考虑直射光,也就是假设场景中的每一点都独立地受到各个光源的直接照射。光源可以抽象成点光源,平行光相当于一个无限远、无衰减的点光源。计算场景中某一点的亮度,就假设是所有点光源打到该点的合成效果。这种计算方式简单,也可以通过GPU加速,可以提供基本的光照效果。其实大部分游戏都是这么做的,但是看起来不够真实。光在物体上会发生反射、折射,相当于多了一个光源,这种影响是简易光照模型没有考虑到的。

更复杂的全局光照模型是要考虑光的反射和折射效果。理论上这个很复杂,有直接光照和间接光照,还有积分。有一些传统的算法可以处理这个,但现在硬件好了,可以实时使用光线追踪算法。

500

光线追踪算法从视点(眼睛)发出上亿条光线,模拟与物体的交汇、反射、折射,不断迭代,直到遇到光源或者跑掉,或者迭代次数足够。图中蓝线是从视点发出的追踪光线,根据折射、反射等效果产生二次光线。虚线表示光源对各个关键点的作用效果。将光源主要可能的作用路径都考虑进去,最后才能计算出复合效果。可能的作用路径有很多,但如果拐弯太多,光强可以忽略。

需要注意的是,光线追踪算法中的“光”是从眼睛向后发,寻找光源,而不是从光源发出,这是违反直觉的。这是因为玩家最终是用眼睛看屏幕的,眼睛能看到的光才是有意义的,逆向推导眼睛发出的光更有效。光源发出的光只能偶然到达眼睛,因此并不适合光线追踪。

这是蒙特卡洛采样模拟算法,视点发出的光线越多,模拟效果越好。光线追踪算法效果最好,可以模拟非常好的阴影和反射。水反射、火反射等场景非常耀眼。GPU 经常使用光线追踪来展示性能。Nvidia 的 RTX 系列 GPU 每秒可以发出数百亿条光线。

500

500

下面这张《黑神话》的图片使用了光线追踪,水的反射效果很惊艳。上面的图片没有使用光线追踪。

《黑神话》等游戏的游戏界面都会有选择画质、是否开启光线追踪等选项,在某些场景下,开启光线追踪会有明显的效果。

《黑神话》的画质备受好评,也得益于虚幻引擎5中的Nanite技术和Lumen技术。

500

黑色神话中的佛像,造型极其细致

Black Myth 的一大特点就是景物逼真,不管是近距离、中距离还是远距离,看上去都很自然。前面提到,一个物体的模型会有高精度和低精度,分别用于近距离和远距离的显示,分为几个等级。但有时候会感觉不自然,精度跳跃。Nanite 技术可以加载超高精度模型(高达十亿个三角形),几何更加真实细腻,这就需要高效的几何压缩和内存管理。根据程序的需求,实时计算出合适的模型和场景显示,而不是存储好几级低精度的模型,这就需要很好的优化。模型要渲染的面数是动态确定的,不可见的面和远处的面可以节省计算能力,也就是说模型本身是动态变化的。整体效果就是场景画质很高,变化自然,实时流畅度达到影视级的高质量画面。

500

电影品质的高质量图像

虚幻引擎5的另一项重要技术是用于光照的Lumen技术,让《黑神话》的光照效果非常出众。Lumen应用了“动态全局光照”,大大优化了光照模型,漫反射效果不错。还有虚幻引擎的粒子特效系统Nigara,火焰、刀光、能量波、落叶飘落等效果都不错。这些技术具体细节很复杂,大家只要感受一下效果就行,有兴趣的可以找深度学习资料。本文主要介绍技术脉络和整体认知。

500

使用Lumen动态全局照明,阴影区域有丰富的明暗变化,且该区域受到漫反射光照。

3D建模、图形渲染、光照模型等都是游戏开发中非常重要的前沿高科技领域。美国凭借在计算机图形、游戏开发等领域的领先优势,自上世纪90年代以来在电影特效应用方面取得了巨大的成功,将好莱坞的影响力传播到了世界各地。此前,各个国家都有一些优秀的电影,美国并没有这么大的优势。

目前,3A游戏开发所涉及的计算机图形技术仍在快速进步,与高性能GPU的发展相联系,是具有战略意义的技术前沿。因此,中国需要支持高水平、高质量的游戏开发,推动技术应用和原创技术研发。《黑神话》的火爆对技术进步来说也是一个好消息。

3.游戏开发团队

介绍了3D动作游戏开发相关的图形学知识,然后介绍了游戏开发商和团队。

开发一款3D动作游戏,需要三类开发者:程序员、策划、美工。人们可以兼职,但任务分工是这样的。此外还有音频相关的,游戏也需要测试。有些开发者是多专业的,我们就一一说说吧。

3D游戏程序开发的工作包括客户端程序、引擎程序、图形程序。客户端是玩家面对的游戏界面,客户端程序员开发并实现游戏玩法。引擎程序员是处理游戏引擎相关程序代码的人,可以对引擎进行高层次的开发和修改。图形程序员是编写着色器、更改渲染管线、加速图形渲染的人。

客户端程序员分为很多种,有网络程序员、AI程序员、游戏玩法程序员、动画程序员、物理程序员等等,大型游戏可能需要相关功能,如果有后端服务器,还要开发后端程序。

500

《黑神话》游戏文案

游戏策划有很多种,比如系统策划,负责炼金、升级、道具等系统的设计;关卡策划是设计地图,设置很多有挑战性的任务,让玩家通关;数值策划是设计游戏细微的战力、经济等数值系统,有时是游戏的核心机制;战斗策划是让战斗更加刺激;文案策划是输出文字,让故事和人物生动起来。

有一个特殊的策划岗位叫做“技术策划”,必须懂游戏开发技术,能够运用专业的数学建模和编程知识参与策划工作,弥补其他策划人员专业的不足,提高策划的质量。

美术对于一款游戏的成功至关重要,决定了游戏的艺术水平。《黑神话》的美术风格一直受到高度评价。

重要的艺术岗位包括:原画,绘制漂亮有艺术感的人物、场景、物体。现在有了AI的帮助,绘制的效率高了很多;3D建模,需要使用DCC软件对场景、物体、人物进行建模;动画师,设计过场动画,制作人物骨骼动画资产。比如人物优美的动作都是动画师画出来的姿势动画,画30帧播放90帧,大部分都是插值生成的;地图编辑,需要编辑地图,把各种模型放到关卡规划设计好的地图里;特效,设计各种刺激炫目的打斗、魔法特效。

也有一个称为“技术艺术家”的职位,例如,他们可以使用图形技术来创造从互联网收集的艺术材料的艺术效果。

在音频方面,有些人负责艺术音乐,而另一些则是“技术音频”,它处理原始音频材料以产生不同的效果,例如为空场景和拥挤的场景而言。

还需要对游戏进行测试。

像黑色神话这样的AAA游戏应该具有以上所有职位。

游戏公司还可以分解一些任务并将其外包,这可以有效地降低开发成本。

富人!

父母!不仅仅是玩有多少技术。

年轻人!不再玩手机游戏,玩3A游戏,看看他们的发展方式。

文章来源:https://user.guancha.cn/main/content?id=1293135