亲爱的命运小伙伴们,你们通关《黑神话:悟空》了吗?还可以通过玩游戏来学习知识。我的朋友陈静是风云社的会员,是一名人工智能研究员,而这恰好是他的研究领域。他写了一篇长文《》,下面给大家介绍一下。读懂这篇文章后,你以后对游戏的看法就会不一样了。
一。 3D游戏开发常识
《黑神话》等动作游戏都是3D游戏。可以理解为有一个虚拟的游戏世界,里面有一个三维坐标系,游戏中的物体在里面移动。
玩家实时看到的只是游戏世界的一小部分,它随着玩家的行走和转身而不断变化。这个世界叫做“相机视角”,也是3D的。
为了在电脑、手机、平板电脑、游戏机等设备上显示图片,需要将相机视角的3D图片转换为2D图片。
2D屏幕显示,3D摄像头视角,整个虚拟游戏世界
游戏是动态的,玩家希望看到的画面像电影一样流畅。越现实越好。这就需要双缓冲机制。
我们屏幕上显示的内容是由显卡处理的(GPU以前就是显卡,后来增加了计算功能)。一幅二维图像内容被放入“显存”,然后由显卡硬件调用,将其显示在屏幕上,所呈现的画面称为“一帧”。如果更新图片时,从上到下逐帧扫描更新,就会有上下不协调的感觉。实际操作时,会在显存中另外准备一个同样大小的缓冲区,在其中计算要写入“下一帧”的图像数据。当一切准备就绪后,将指针指向屏幕图像硬件调用并立即将所有内容更新到屏幕上。原始帧成为计算下一帧的图像缓冲区。通过这样来回切换,画面就像电影一样进行。
实际上游戏开发,当显示切换到每秒 30 帧的“帧速率”时,人眼感觉更加平滑。如果帧率低于30,就会有卡顿的感觉。 30的帧率会继续提高,人眼会感觉画面更加流畅。一般人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每年都会有大版本更新,比如2019版本、2020版本,直到2024版本,小版本更新会比较频繁。
Unreal的中文名称是“虚幻”,但没有专门的中文版本。现在流行的是虚幻4(或UE4,2014年发布)和虚幻5(或UE5,2020年发布)。 《黑神话》是使用虚幻5开发的,虚幻引擎的开发商是著名的游戏公司EPIC,旗下有《堡垒之夜》、《战争机器》等作品。为了促进行业的发展,EPIC开放了Unreal的源代码,但它并不是开源的,仍然需要付费才能使用。与Unity一样,Unreal也可以用于影视等其他领域。
与Unity相比,Unreal首先实现了一些先进的图形算法。其中有一些在《黑神话》中使用过,比如Nanite和Lumen,后面会介绍。不过,Unity将来也会实现这些算法。 Unreal还有一个定义游戏规则和角色动作的代码框架,称为游戏玩法,但Unity没有。但这并不意味着Unreal更好。也许开发者认为游戏定义规则的方式对于某些游戏来说效率不高。
个人开发者和中小型公司一般使用Unity或Unreal引擎来开发游戏。大公司也会使用,但是大公司也会有自己开发的引擎,以代表公司的技术实力。
此外还有DCC软件(Digital Content Creation,数字内容生成)和建模软件,如Blender、3DMAX、Maya等,用于生成业内最常见的FBX模型文件。
以上是游戏开发的概念常识,不涉及具体的数据结构和算法。
2. 游戏开发的基本算法概念
对于游戏世界中的物体来说,基本的表示方法是三角形网格(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年代初就有了《侏罗纪公园》、《终结者2》等特效电影,当时GPU还没有出现。但这些特效需要很长时间才能创造出来。如果你释放它们一分钟,它们可能需要一周才能完成。 3D动作游戏需要实时计算,并且需要非常强大的GPU。
很多人熟悉CPU的串行编程逻辑,但了解GPU编程的人却很少。 GPU拥有数千个计算核心,可以并行加速计算过程。但还有很多细节。这些核心并不完全相同,而是分为几类,每一类都有自己的特殊任务。 GPU的内部架构也不简单。
Shader可以理解为运行在GPU上的并行加速程序。有很多种类型的Shader来完成顶点位置、像素颜色计算等任务。为Shader准备输入数据,它会将计算后的数据写入显存和显存。
游戏开发引擎会提供多种Shader,开发者也可以编写自己的Shader进行特殊处理。但仅仅有了Shader就意味着程序只有一些子功能,并不能完成整个任务。
这时候就需要“渲染管线”来安排一系列的处理动作。是将3D游戏世界的数据转换为2D屏幕上的画面的过程。渲染管线可以理解为CPU+GPU编程,是一个软件和硬件的过程。每一步都会调用CPU或GPU。会有多个不同的Shader来完成主要计算,CPU处理逻辑并准备数据。
游戏开发引擎提供渲染管线代码,程序员可以修改。它计算出现在“相机透视”中的对象,剪掉透视之外的对象,并处理边缘。它需要确定场景中物体的遮挡情况。对于每个对象,计算 2D 显示的颜色值。
一个特殊的算法是天空渲染,它实际上是6张“参考图片”,作为天空采样纹理,对应于立方体的6个面。渲染天空时,根据当前位置和方向计算天空颜色值。从这个意义上说,“天空盒”实际上并不存在,它不在场景文件中。
一个游戏的渲染管线写好之后,图形显示部分就准备好了。但是,如果更改 GPU,则可能需要更改渲染管道。如果GPU不够强大,一些高开销的Shader无法运行,就必须更换为低开销的Shader,帧率和图像质量都会降低。 《黑神话》第一次启动时,会进行“着色器编译”,即根据机器的CPU+GPU组合编译出合适的二进制代码。以后就不再需要重新启动了。
《黑神话》对GPU性能有要求,也是这个原因。如果 GPU 甚至无法运行游戏所需的最低 Shader,则游戏将无法运行。不可能切换到CPU来运行Shader,太慢了,无法接受。
需要注意的是,渲染管道仅显示相关计算,例如游戏的玩法和物理引擎。这些是也可能调用 GPU 的其他管道。渲染是指计算并渲染一帧并将屏幕数据写入显存的动作。渲染是一个动作,渲染管线是一个过程。
至此,3D游戏开发的大纲就已经成型了。但还剩下一个最重要、最复杂的部分,即光照模型。场景的外观由一个或多个光源的效果决定。计算非常复杂,也与物体的材质有关。物体的材质实际上是物体与光相互作用的本质。物体看起来像草、树还是水是由光的吸收、反射和透明度特性决定的。
物体的颜色并不是其固有属性,而是由相对复杂的物理理论决定的,涉及漫反射、镜面反射、微表面理论等概念。在游戏开发中,它被称为基于物理的渲染,用于处理光线和物品之间的交互。光照模型也是渲染中的一个重要概念。
仅考虑直接光的简单照明模型假设场景中的每个点都独立地受到每个光源的直接照明的影响。光源可以抽象为点光源,平行光相当于无限大且无衰减的点光源。为了计算场景中某个点的亮度,假设它是撞击该点的所有点光源的合成效果。这种计算方法简单,也可以通过GPU加速,并且可以提供基本的光照效果。事实上,大多数游戏都会这样做,但显得不够真实。光在物体上会发生反射和折射,这意味着有一个新的光源。简单的光照模型没有考虑这种影响。
考虑光的反射和折射效应的就是全局照明模型。理论上这个很复杂,直接照明,间接照明,还有集成。有一些传统的算法可以处理它,但是现在硬件更好了,可以使用实时光线追踪算法,光线追踪,简称光线追踪。
光线追踪算法从视点(眼睛)发出数亿条光线,模拟与物体的相交、反射、折射,不断迭代,直到遇到光源,或者用完,迭代次数就足够了。图中的蓝线是从视点发出的跟踪光线,根据折射、反射等效果产生二次光线。虚线代表光源对每个关键点的影响。考虑光源主要可能的作用路径,最终可以计算出复合效果。可能的动作路径有很多种,但如果转弯次数过多,则可以忽略光强度。
需要注意的是,光线追踪算法是从眼睛向后发送光线来寻找光源,而不是从光源发出光线,这是违反直觉的。这是因为最终玩家是用眼睛来看到画面的,眼睛能看到的光是有意义的。反向扣除眼睛发出的光,效果更佳。光源发出的光只是偶然到达眼睛,因此不适合光线追踪。
这是一种蒙特卡罗采样模拟算法。视点发出的光越多,模拟效果越好。光线追踪算法效果最好,可以模拟出很好的阴影和反射效果。水中倒影、火焰倒影等场景非常耀眼。 GPU 通常使用光追踪来展示性能。 NVIDIA的RTX系列GPU可以在一秒钟内发出数百亿条光线。
下图《黑神话》开启追光,水体的折射和反射效果惊人,上图未开启追光
像《黑神话》这样的游戏界面会有选择图像质量、是否开启光线追踪等选项,在某些场景下,开启光线追踪会有明显的效果。比如对比这两张图,追光的水体折射和反射效果令人惊叹。
《黑神话》的画面广受好评也得益于虚幻5引擎中的Nanite技术和Lumen技术。
黑色神话中的佛像群,造型极其细致
《黑神话》的画面特点之一是,无论近景、中景、远景,都显得非常自然。前面说过,物体的模型会有高精度和低精度之分,分别用于近景和远景显示,分为几个级别。但有时感觉不自然,准确度也会跳跃。 Nanite技术可以加载超高精度模型(高达十亿个三角形),几何图形更加真实细腻,这就需要高效的几何压缩和内存管理。根据程序需要,可以实时计算出合适的模型和场景显示,而不用存储几个级别的低精度模型。这就需要很好的优化。模型中要渲染的面数是动态确定的。看不见的、遥远的面孔可以节省计算能力,这意味着模型本身是动态变化的。整体效果是场景质量非常高,实时变化自然流畅,达到了影视级别的高品质画面。
影视级高品质画面
虚幻5的另一项重要技术是用于光照的Lumen技术,它使得《黑神话》的光影效果出众。 Lumen采用“动态全局照明”,大幅优化光照模型,具有良好的漫反射效果。还有虚幻引擎的粒子特效系统Nigara,对火焰、刀光、能量波、落叶都有很大的效果。这些技术的具体细节非常复杂,有利于我们感受效果。
采用Lumen动态全局光照,阴影区域明暗变化丰富,区域接收漫射光。
游戏开发中的3D建模、图形渲染、光照模型等都是非常重要的前沿高科技领域。美国凭借其在计算机图形学、游戏开发等领域的领先地位。 20世纪90年代以来,特效在电影中的应用取得了巨大成功,让好莱坞的影响力遍布全球。过去各国都有一些优秀的电影,但美国没有那么大的优势。
目前,3A游戏开发涉及的计算机图形技术仍在快速进步,与高性能GPU开发结合是一个具有战略意义的技术前沿。因此,我国需要支持高水平、高质量的游戏开发,推动技术应用和原创技术研发。 《黑神话》的火爆也是技术进步的好消息。
三。游戏开发团队
介绍完3D动作游戏开发相关的图形知识后,我们来介绍一下游戏开发者和团队。
开发 3D 动作游戏需要三类开发人员:编写程序的开发人员、策划的开发人员和做美术的开发人员。人员可以兼职,但任务分工就分为这三类。还有音频相关和游戏测试。有些开发者是跨域的,我们一一说一下。
3D游戏程序开发的任务包括客户端程序、引擎程序和图形程序。客户端是玩家面对的游戏界面,客户端程序员开发并实现游戏玩法。引擎程序员是处理与游戏引擎相关的程序代码的人员。水平高的可以自行开发、改装发动机。图形程序员编写着色器、修改渲染管线并加速图形渲染。
客户端程序员的类型有很多,包括网络方向、AI方向、游戏方向、动画方向、物理方向等,大型游戏可能需要相关功能。如果有后端服务器,还必须开发后端程序。
《黑神话》中的游戏文案
游戏策划也有很多种,比如系统策划,负责炼金、升级、道具等系统的设计。关卡规划涉及设计地图并设置众多具有挑战性的任务供玩家通过。数值策划是对游戏战斗力、经济等微妙数值系统的设计,有时也是游戏的核心机制。战斗策划让战斗更加精彩。文案策划,输出文字,让故事和人物活起来。
有一个特殊的策划岗位,叫“技术策划”。必须了解游戏开发技术,运用专业的数学建模和编程知识参与策划工作,弥补其他策划的专业不足,提高策划的质量。
美术对于游戏的成功至关重要,决定了游戏的艺术水平。 《黑神话》的美术风格备受好评。重要的艺术职位包括:原创画家,绘制美丽且具有艺术性的人物、场景和物体。现在有了人工智能的帮助,绘图效率大大提高了; 3D建模,需要使用DCC软件对场景、物体、人物进行建模;动画师,设计过场动画并制作角色骨架动画资源。例如,人物优美的动作是动画师绘制的姿势动画。绘制 30 帧,然后释放 90 帧。大部分是通过插值生成的;地面编辑需要编辑地图并转换各种类型的动画。将模型放入关卡规划设计的地图中;特效,设计了各种刺激炫目的战斗和魔法特效。
还有一个职位叫“技术美术师”,懂艺术和图形,可以编程和编写着色器。例如,图形技术将用于从互联网上收集的艺术材料中创建艺术效果。技术美术的美术功底也不弱。说不定被学校招进来,就能培养职场级的原创绘画能力,能够产出商业美术资产。再加上技术能力,综合实力就会很强。
音频方面,有负责美术音乐的,也有处理打斗、动作音效的。还有“技术音频”,对原始音频素材进行处理,产生不同音效的开放场景和密集场景等效果。
游戏需要进行测试也非常重要。测试工程师负责发现程序的bug,最终使程序稳定运行。还有负责“用户体验”的人。他们不是在寻找bug,而是评估程序的用户体验,提出修改建议,提高游戏水平。
对于《黑神话》这样的AAA级大作来说,这些位置应该都有。有些人身兼数职,了解多个领域。
游戏公司还可以将一些任务分解并外包,这样可以有效降低开发成本。据说“黑人神话”的开发商Game Science拥有133名常规员工和500人的外包团队。
有钱人!以这种方式发展了“黑色神话”,这不是很难吗?如何投入资金开发一个?
父母!查看游戏开发中涉及多少技术?想让孩子学习游戏开发的基本知识吗?
男孩们!快来玩3A游戏杰作,看看游戏的发展是如何开发的。考虑一下您可以做什么,也许您将成为未来的游戏开发天才!