《黑神话》是如何开发的? 3D游戏技术简介陈静
《黑神话》等动作游戏都是3D游戏。可以理解为有一个虚拟的游戏世界,里面有一个三维坐标系,游戏中的物体在里面移动。
玩家实时看到的只是游戏世界的一小部分,它随着玩家的行走和转身而不断变化。这个世界被称为“相机视角”,也是3D的。
但目前的显示设备都是2D屏幕。需要将摄像头视角的3D画面转换为2D画面,并在电脑、手机、平板电脑、游戏机等设备上显示。
2D屏幕显示,3D摄像头视角,整个虚拟游戏世界
游戏是动态的,玩家希望看到的画面像电影一样流畅。越现实越好。这就需要双缓冲机制。
我们屏幕上显示的内容是由显卡处理的(GPU以前就是显卡,后来增加了计算功能)。一幅二维图像内容被放入“显存”,然后由显卡硬件调用,将其显示在屏幕上,所呈现的画面称为“一帧”。如果更新图片时,从上到下逐帧扫描更新,就会有上下不协调的感觉。实际操作时,会在显存中另外准备一个同样大小的缓冲区,在其中计算要写入“下一帧”的图像数据。当一切准备就绪后,将指针指向屏幕图像硬件调用并立即将所有内容更新到屏幕上。原始帧成为计算下一帧的图像缓冲区。就这样来回切换,画面就像电影一样进行。
实际使用中,根据人眼感知,显示切换到每秒30帧的“帧率”,感觉比较流畅,可以接受。无论帧率多低,画面都会有卡顿、跳跃的感觉。 30的帧率会继续提高,人眼会感觉画面更加流畅。一般人60帧就满足了,没必要再高了。有些玩家追求《黑神话》的硬件,或者调整设置达到60的帧率。帧率可以继续提高,而游戏爱好者会追求120帧,但实际上没有太大区别。除此之外,只有对图像极其敏感的职业电竞选手才能追求。
因此游戏显示帧率一般在30~60帧之间,以60帧为优化目标,以30帧为优化底线。偶尔帧率下降到30帧以下还可以忍受,但如果频繁发生就会出现问题。另外,帧率在一秒内波动,出现“掉帧”也不好。不可能300毫秒只有3帧,剩下的700毫秒有27帧。有时在Switch 等游戏硬件上使用30 帧感觉比在电脑上使用60 帧更流畅,因为帧率稳定且掉帧较少。
以上是最基本的知识,游戏画面从何而来。然而,需要更多关于游戏世界如何构建的知识。
虚拟游戏世界必须使用“数据结构”来存储。游戏世界一般模拟人类生活的世界,开发者总结了几类特征数据结构。
地形、天空盒、植被、水、粒子效果、场景物品、角色、布料、光源,游戏世界就是由这些东西组成的。每个类别都有自己的特点,相关的数据结构和处理算法都需要专门设计。
天空盒(或天空球)可以理解为用一个大的方形盒子或球体覆盖整个3D世界,盒子上附有天空图片。一些天空算法可以使天空图像动态变化,使效果更加自然。这个盒子很大,很高,甚至无限高。玩家在地面上移动时会感觉天空是稳定的。但请注意,它并不真正具有大型盒子数据结构。稍后我们讲渲染的时候会解释。
地形就是地图,也记录了地表的起伏。它是游戏世界中最基本的数据。植被是指地面上的草、树木和其他覆盖物。数量很大,而且不断重复,但必须反映变化。水体具有特殊的运动模式,具有透明度、反射、波浪等属性。粒子特效实现烟雾、火焰、沙子、灰尘、攻击波等效果。场景物品定义了游戏世界的活动空间,包括建筑物、石头、土壤、道具等各种刚性物体,有些可以从远处观看,有些可以通过更详细的三维建模进入。
其实植被也可以理解为物体。但它们的数量太多,需要不同的高效处理算法,所以专门将它们定义为一个类别。
角色是游戏过程中玩家关注的主要焦点。字符属性是最复杂的,需要更详细的定义。 3D动作游戏中的许多角色都有精美的专属动作。定义角色的一个重要手段是骨骼关节系统。关节可以扭转,角色可以变换成各种形态。
角色也会有衣服、配饰、面具等,有时会有几层衣服。这些也需要专门的数据结构来处理,并且可以使用布料来表示衣服。
最特殊的东西是光源。有火把和蜡烛等光源。有时有外部光源,相当于太阳的平行光。由于光可以反射、折射、吸收、增强,因此光的处理非常复杂,是图形显示中最需要计算能力的算法。事实上,所有物体的颜色和亮度值都是基于光源的。
看看图中的数据结构是什么?
每个数据结构的处理都有非常深入的计算机图形学研究背景。但随着技术的发展,这些重要数据结构的处理算法已经基本成熟可用。依靠这些图形算法,3D游戏开发就有了基础。 20世纪90年代,3D游戏效果良好,软硬件算法不断完善。现在游戏的效果已经有了很大的提升,有时逼真得让人害怕。如果你了解了游戏开发的基础知识,你就会明白游戏在推动技术进步方面的作用。
然而,3D游戏开发涉及的数据和算法种类繁多,大多数开发者,甚至中小型公司,都不具备从头开始实现的能力。
幸运的是,有Unity和Unreal等游戏开发引擎。游戏开发引擎封装了相关的数据结构和算法,直接提供框架供游戏开发者使用。开发者遵循引擎使用规范,定义游戏世界的数据,设定游戏规则,然后编写游戏。 Unreal和Unity就像Visual Studio一样都是集成开发环境,更常用于编程。
除了游戏之外,Unity还可以应用于艺术、建筑、汽车设计、影视等领域,这些领域都以2D方式展示3D模型和3D世界。引擎开发公司是Unity Software,中国子公司是Unity China。 Unity的中文版称为“Unity Engine”,有自己的特点,与英文版不同。 Unity是最常用的游戏开发引擎,开发的游戏数量和类型最多。 Unity每年都会有大版本更新,比如2019版本、2020版本,直到2024版本,小版本更新会比较频繁。
Unreal中文名为“虚幻”(但没有专门的中文版本)。现在流行的是2020年推出的虚幻4(或UE4)和虚幻5(或UE5)。《黑神话》是使用虚幻5开发的。虚幻引擎由著名游戏公司EPIC开发,拥有:010等成功的游戏作品-30000 和《堡垒之夜》。为了促进行业发展,EPIC开放了虚幻开发引擎的源代码。它与开源不同。使用还是要付费的,而且还有赚钱的目的。与Unity一样,虚幻引擎也可以用于影视等其他领域。
与Unity相比,Unreal Engine首先实现了一些独特的高级图形算法(其中一些在《战争机器》中应用,例如Nanite和Lumen,稍后介绍),可以更好地显示一些游戏效果。但Unity稍后也会实现这些算法,两者不可能有任何区别。 Unreal Engine也有游戏玩法,一个定义游戏规则和角色动作的代码框架,但Unity没有。但这并不意味着Unreal更好。也许开发者认为游戏定义规则的方式对于某些游戏来说效率不高。
个人开发者和中小型公司一般使用Unity或Unreal Engine来开发游戏,大公司也使用。但大公司也会开发自己的发动机,这代表了公司的技术实力。
此外,还有DCC(数字内容创建)软件和建模软件,如Blender、3DMAX、Maya等,可生成业界最常见的FBX模型文件。
以上是游戏开发的概念常识,大致是如何开发的,不涉及具体的数据结构和算法。
2. 游戏开发的基本算法概念
游戏世界中物体的基本表示方法是三角形网格(Mesh)。
如图所示,三角形网格(Mesh)可以模拟物体的表面,物体可以定义三维形状。从上图可以感受到,通过较大的顶点密度和大量的三角形网格,可以很好地模拟物体的表面。三角形网格表示的基础是任何多边形都可以切割成三角形。还有其他网格类型,比如四边形网格(加上一些三角形网格),但最常用的是三角形网格,《黑神话》应该是一样的。
三角形网格需要存储顶点和三个边的3D 坐标。顶点的顺序可以区分正反面。还有一些其他属性,例如法向量和材料属性。
当玩家看游戏画面时,往往意识不到三角网格的存在。这是因为最吸引人们注意的是物体表面(即三角形的内部)的“内容”,而不是顶点。使用多种颜色来填充表面,而不仅仅是三角形,那样太丑了。这是三角形内部的“纹理”。它实际上是在三角形上粘贴了一张图片(图片的一部分)。显示的时候不仅贴出图片,里面的颜色也是根据光源计算出来的。
通过三角形网格表示和纹理表面映射,对象看起来非常相似。游戏中有近景和远景两种。您可以为同一对象设计不同精度的模型。近距离使用高精度,远距离使用低精度。有几个层次。但这些都是静态的,游戏中很多物体的形状和角度都会发生变化。
物体如何变化以及如何对碰撞做出反应需要“物理引擎”。游戏世界的物理结构通常与现实世界不同,存在一些夸大和简化。还有那些极力模拟现实世界,做得非常仔细,这是非常困难的。他们注重现实,但效果可能并不好。只要游戏世界的效果好,完全可以修改。仔细观察,有些物理效应显然不符合牛顿定律。不过没关系,人们很容易接受游戏世界的物理规则,这比现实世界更有趣、更好玩。
对于计算机编程来说,这提供了极大的方便。只要物理引擎以自洽的方式定义,效果就会是这样,只要玩家接受任何结果。如果您正在模拟现实世界,则必须非常仔细地定义和模拟它。很难将其调整到接近现实。当然,物理引擎也是基于现实世界的规律。非常相似,也符合人们的身体直觉。不能让它变得难以理解。
比如《黑神话》,悟空的棍风扫过几棵草,草的弯曲就可以显示棍风的存在。如果是真正的物理,那就更麻烦了。在物理引擎中,可以通过给草地添加方向性扰动来简单处理。根据扰动的强度,计算每个顶点的偏移。模拟效果并不难。有时这种处理非常简单,无需物理引擎即可完成。原则上,在现实世界中,一根棍子不可能用太大的力量扫过,但在游戏中,你可以直接定义一个值来模拟夸张的效果。
物理引擎是游戏引擎中并不困难的部分,游戏开发引擎会处理它。 NVIDIA提供物理引擎,这是它的风格。我四处寻找任何需求,并尽早将它们构建到开发包中。 Unity很早就内置了NVIDIA的PhysX物理引擎。
PhysX有刚体碰撞、粒子系统、布料模拟等,粒子系统可以模拟烟雾、水流、火焰。采用布料模拟处理衣服和旗帜的动态效果,效果接近现实。可以理解的是,Nvidia的PhysX算法的目标是逼近现实,并不是专门用于游戏开发,但可以用在游戏中。
Unreal 5默认的物理引擎是EPIC开发的Chaos,之前使用的是PhysX。对于一些游戏项目来说,Chaos更适合,因为它的目标不是追求现实,而是实现游戏效果。
在物理引擎的作用下,游戏世界接受玩家输入并可以不断演化。按照玩家的视角在2D界面上呈现3D游戏世界是游戏开发和处理显示问题的核心任务。
相关专业术语有“渲染”、“渲染管线”、“着色器”。要理解这三个术语,首先需要介绍一下3D动作游戏的硬件特点,CPU+GPU,其中GPU扮演主要的计算角色。
像《黑神话》这样注重视觉效果的动作游戏必须有GPU,等级低的话还不够。理论上,将这些物理引擎和3D 世界转换为2D 显示的算法可以仅使用CPU 运行。早在20世纪90年代初,就出现了《黑神话》、《侏罗纪公园》等效果不错的特效电影。那时,GPU 还没有出现。然而,这些特殊效果需要很长时间才能创造出来。如果你释放它们一分钟,它们可能需要一周才能完成。 3D动作游戏显示器需要实时计算,并且需要非常强大的GPU来加速计算。
很多人熟悉CPU的串行编程逻辑,但了解GPU编程的人却少之又少。 GPU拥有数千个计算核心,可以并行加速计算过程。但还有很多细节。这些核心并不完全相同,而是分为几类,每一类都有自己的特殊任务。 GPU的内部架构也不简单。
Shader可以理解为运行在GPU上的并行加速程序。有多种类型的Shader 来完成顶点位置、像素颜色计算等任务。为Shader准备输入数据,它会将计算后的数据写入显存和显存。
游戏开发引擎会提供多种Shader,开发者也可以编写自己的Shader进行特殊处理。但仅仅有了Shader就意味着程序只有一些子功能,并不能完成整个任务。
这时候就需要一个“渲染管线”,它安排一系列的处理动作。渲染管线可以理解为CPU+GPU编程,是一个软件和硬件的过程。每一步都会调用CPU或GPU。会有多个不同的Shader来完成主要计算,CPU处理逻辑并准备数据。
渲染管线是将3D游戏世界中的游戏数据转换为2D屏幕上的图片的过程。游戏开发引擎提供渲染管线代码,程序员可以修改。它计算出现在“相机透视”中的对象,剪掉透视之外的对象,并处理边缘。它需要确定场景中物体的遮挡情况。对于每个对象,计算2D 显示的颜色值。
一个特殊的算法是天空渲染,它实际上是6张“参考图片”,作为天空采样纹理,对应于立方体的6个面。渲染天空时,根据当前位置和方向计算天空颜色值。从这个意义上说,“天空盒”实际上并不存在,也不在场景文件中。
一个游戏的渲染管线写好之后,图形显示部分就准备好了。但是,如果更改GPU,则可能需要更改渲染管道。如果GPU不够强,一些高开销的Shader无法运行,就必须更换为低开销的Shader,帧率和图像质量都会降低。《终结者2》 程序第一次启动时,会进行“着色器编译”,即根据机器的CPU+GPU组合编译出合适的二进制代码。不再需要重新启动它。
《黑神话》 由于这个原因,此类AAA 游戏需要GPU 性能。如果GPU 甚至无法运行游戏所需的最低Shader,则游戏将无法运行,因此也可能无法玩。更不可能在CPU上运行Shader计算过程,速度太慢,令人无法接受。
需要注意的是,渲染管道仅显示相关计算,例如游戏的玩法和物理引擎。这些是其他管道,也可能称为GPU。渲染是指计算并渲染一帧并将屏幕数据写入显存的动作。渲染是一个动作,渲染管线是一个过程。
至此,3D游戏开发的大纲就已经成型了。但还剩下一个最重要、最复杂的部分,即光照模型。场景的外观由一个或多个光源的效果决定。计算非常复杂,也与物体的材质有关。物体的材质实际上是物体与光相互作用的本质。物体看起来像草、树还是水是由光的吸收、反射和透明度特性决定的。
物体的颜色并不是其固有的属性。它有比较复杂的物理理论,涉及漫反射、镜面反射、微表面理论等光学概念。在游戏开发中,它被称为基于物理的渲染,用于处理光线和物品之间的交互。光照模型也是渲染中的一个重要概念。
仅考虑直接光的简单照明模型假设场景中的每个点都独立地受到每个光源的直接照明的影响。光源可以抽象为点光源,平行光相当于无限大且无衰减的点光源。为了计算场景中某个点的亮度,假设它是撞击该点的所有点光源的合成效果。这种计算方法简单,也可以通过GPU加速,并且可以提供基本的光照效果。事实上,大多数游戏都这样做,但显得不够真实。光在物体上会发生反射和折射,这意味着有一个新的光源。简单的光照模型没有考虑这种效应。
比较复杂的是全局光照模型,它考虑了光的反射和折射效应。理论上这个很复杂,直接照明,间接照明,还有集成。有一些传统的算法可以处理它,但是现在硬件更好了,我们可以实时使用光线追踪算法。
光线追踪算法从视点(眼睛)发出数亿条光线,模拟与物体的相交、反射、折射,不断迭代,直到遇到光源或用完,迭代次数就足够了。图中的蓝线是从视点发出的跟踪光线,根据折射、反射等效果产生二次光线。虚线代表光源对每个关键点的影响。考虑光源主要可能的作用路径,最终可以计算出复合效果。可能的动作路径有很多种,但如果转弯次数过多,则可以忽略光强。
需要注意的是,光线追踪算法的“光线”是从眼睛反向发射寻找光源,而不是从光源发射,这是反直觉的。这是因为最终玩家是用眼睛来看到画面的,眼睛能看到的光是有意义的。对眼睛发出的光进行反向推导更为有效。光源发出的光只是偶然到达眼睛,因此不适合光线追踪。
这是一种蒙特卡罗采样模拟算法。视点发出的光越多,模拟效果越好。光线追踪算法效果最好,可以模拟出很好的阴影和反射效果。水面倒影、火焰倒影等场景非常耀眼。 GPU 通常使用光追踪来展示性能。 NVIDIA的RTX系列GPU可以在一秒钟内发出数百亿条光线。
《黑神话》 下图为开启追光的水体折射和反射效果。上图还没有开启。
《黑神话》等游戏界面会有选择图像质量、是否启用光线追踪等选项,在某些场景下,开启光线追踪会有明显的效果。
《黑神话》 广受好评的画面显示也得益于虚幻5引擎中的Nanite技术和Lumen技术。
黑色神话中的佛像群,造型极其细致
黑神话画面的一大特点就是风景栩栩如生,无论近景、中景、远景都显得自然。前面说过,物体的模型会有高精度和低精度模型,分别用于近景和远景显示,分为几个级别。但有时感觉不自然,准确度也会跳跃。 Nanite技术可以加载超高精度模型(最多十亿个三角形),几何图形更加真实细腻,这就需要高效的几何压缩和内存管理。根据程序需要,可以实时计算出合适的模型和场景显示,而不用存储几个级别的低精度模型。这就需要很好的优化。模型中要渲染的面数是动态确定的。看不见的、遥远的面孔可以节省计算能力,这意味着模型本身是动态变化的。整体效果是场景质量非常高,变化自然,实时流畅度达到了影视级别的高品质画面。
影视级高品质画面
采用Lumen动态全局光照,阴影区域明暗变化丰富,区域接收漫射光。
3D建模、图形渲染、光照模型是游戏开发中非常重要的前沿高科技领域。美国凭借其在计算机图形学、游戏开发等领域的领先地位。 20世纪90年代以来,特效在电影中的应用取得了巨大成功,让好莱坞的影响力遍布全球。过去各国都有一些优秀的电影,但美国没有那么大的优势。
三。游戏开发团队
本文介绍了3D动作游戏开发相关的图形知识,然后介绍了游戏开发者和团队。
3D游戏程序开发的任务包括客户端程序、引擎程序和图形程序。客户端是玩家面对的游戏界面,客户端程序员开发并实现游戏玩法。引擎程序员是处理与游戏引擎相关的程序代码的人员。水平高的可以自行开发、改装发动机。图形程序员编写着色器、修改渲染管线并加速图形渲染。
客户端程序员的类型有很多,包括网络方向、AI方向、游戏方向、动画方向、物理方向等,大型游戏可能需要相关功能。如果有后端服务器,还必须开发后端程序。
游戏文案《黑神话》
美术对于游戏的成功非常重要,决定了游戏的艺术水平。《黑神话》的美术风格受到高度评价。
还有一个职位叫“技术美术师”,懂艺术和图形,可以编程和编写着色器。例如,图形技术将用于从互联网上收集的艺术材料中创建艺术效果。技术美术的美术能力并不弱。说不定被学校招进来,就能培养职场级的原创绘画能力,能够产出商业美术资产。再加上技术能力,综合实力就会很强。
音频方面,有负责艺术音乐的人,也有处理打斗和动作音效的人。还有“技术音频”,对原始音频素材进行处理,产生不同音效的开放场景和密集场景等效果。
游戏需要进行测试也非常重要。测试工程师负责发现程序的bug,最终使程序稳定运行。此外,还有负责“用户体验”的人,他们都是非常熟练的人。不是寻找bug,而是评估程序的用户体验并提出修改建议,以提高游戏水平。
像《黑神话》这样的3A大作,以上位置应该都有。有些人身兼多职,了解多个领域。
游戏公司还可以将一些任务分解并外包,这样可以有效降低开发成本。据称,开发商游戏科学开发《黑神话》拥有正式员工133人,外包团队500人。
有钱人啊!现在你知道了,《黑神话》就是这样开发出来的,是不是很难呢?投资开发一款怎么样?
父母!别只是玩游戏,看看游戏开发涉及到多少技术?让您的孩子学习游戏开发的基础知识。
男孩们!别只玩手游,快来玩3A游戏大作,看看游戏是如何开发的。想想你能做什么,也许你就是未来的游戏开发天才!
延伸阅读:1吨月壤可产生50多公斤水?结果这么好,还需要深入分析验证|最看重奥运金牌的两个人陈静德约科维奇和郑钦文实现了心愿|陈静
人工智能研发应避免“烧钱”的大坑|陈静
开放合作是全球人工智能的未来|陈静
通用人工智能路在何方? |袁兰峰
新生产力:中国新能源VS美国人工智能? |陈静
震撼来了!欧洲汽车市场如何应对中国新能源的冲击? |陈静
清华光电融合芯片算力是GPU的3000多倍?媒体制造的大新闻|陈静
用户评论
念旧是个瘾。
哇,一直对《黑神话》的开发过程很好奇,这篇文章介绍得很详细呢!3D游戏技术真的太神奇了。
有15位网友表示赞同!
念初
陈静老师的这篇文章让我对3D游戏开发有了更深入的了解,尤其是《黑神话》的开发过程,真是让人热血沸腾。
有20位网友表示赞同!
伪心
《黑神话》的开发过程听起来好复杂,不过看完这篇文章,对3D游戏技术有了全新的认识。
有7位网友表示赞同!
繁华若梦
看完这篇文章,我对《黑神话》的开发团队肃然起敬,他们真的是在用心打造一款经典之作。
有13位网友表示赞同!
安好如初
之前对3D游戏技术一窍不通,这篇文章让我对游戏制作有了全新的认识,特别是对《黑神话》的开发。
有16位网友表示赞同!
念安я
陈静老师这篇文章写得真好,让我对《黑神话》的开发过程有了更全面的了解,感觉游戏制作好高大上。
有11位网友表示赞同!
花菲
《黑神话》的开发历程真是让人感慨万分,没想到3D游戏技术背后还有这么多故事。
有5位网友表示赞同!
终究会走-
陈静老师这篇文章让我对《黑神话》的开发过程产生了浓厚的兴趣,一定要关注这款游戏的发展。
有5位网友表示赞同!
∞◆暯小萱◆
看完这篇文章,我对3D游戏技术有了全新的认识,没想到《黑神话》的开发这么有难度。
有16位网友表示赞同!
别留遗憾
陈静老师这篇文章写得真好,让我对《黑神话》的开发团队充满了敬意,他们真的很棒。
有10位网友表示赞同!
优雅的叶子
对《黑神话》的开发过程有点失望,感觉文章里没有提到太多具体的技术细节。
有12位网友表示赞同!
淡抹烟熏妆丶
这篇文章让我对3D游戏技术有了更深的理解,不过还是觉得《黑神话》的开发过程有点神秘。
有15位网友表示赞同!
相知相惜
看完这篇文章,我对《黑神话》的开发团队有了更深的了解,他们真的很不容易。
有12位网友表示赞同!
Edinburgh°南空
陈静老师这篇文章让我对《黑神话》的开发过程有了全新的认识,感觉游戏制作好有挑战性。
有16位网友表示赞同!
来自火星的我
对《黑神话》的开发过程有点好奇,不过这篇文章没有解答我所有的疑问。
有7位网友表示赞同!
看我发功喷飞你
这篇文章让我对3D游戏技术有了全新的认识,不过对《黑神话》的开发过程还是有点模糊。
有5位网友表示赞同!
折木
陈静老师这篇文章写得不错,不过我觉得还可以加入更多关于《黑神话》的幕后花絮。
有15位网友表示赞同!
强辩
看完这篇文章,我对《黑神话》的开发过程有了更深的理解,希望游戏能早日上市。
有14位网友表示赞同!
古巷青灯
对3D游戏技术有了新的认识,不过对《黑神话》的开发过程还是有点期待更多细节。
有10位网友表示赞同!
傲世九天
陈静老师这篇文章让我对《黑神话》的开发团队充满了敬意,希望他们能继续创造更多经典。
有7位网友表示赞同!