作者:Jake @ Antalpha Ventures, Blake @ Akedo Games, Jawker @ Cipherwave Capital
由于不同研发公司采用的架构(采用项目+中台组织架构)不一样,对项目和中台组织的侧重点不同,有些是强项目,弱中台,有些是强中台,弱项目。因此本系列文章主要按照游戏研发涉及的职能与流程分析。基于此,本系列的第二篇文章主要针对 Web3 Gaming 的工业化生产与制作(美术与技术)方面分析。在游戏立项后,游戏的策划人员已确定核心玩法与可玩性等细节,包括角色成长、玩家行为引导、地图与剧情等。因此,游戏策划需与美术与技术沟通,将 Web3 游戏开发推进到设计与开发阶段。
Source:公开市场信息
Source:不鸣科技
当策划明确需求后,游戏的前端和后端技术等技术程序团队需实现策划部门提出的游戏设计,编写游戏代码,确保游戏的技术实现。在具体的执行过程中,可以分为前端程序和后端程序。主程需要管理技术的全流程,包括但不限于确定主要技术执行方案、各类性能的优化及指导底层框架的搭建等。
下图为 Web3 Gaming 在前端程序和后端程序各部分的展示。后文会详细对两部分详细分析。
Source:游鲨游戏圈;Jake 整理
游戏的前端程序开发关注游戏界面、交互和用户体验。在交互性与用户体验方面,需要重点关注游戏的交互性和用户体验,这包括游戏界面(UI)的设计与实现、用户交互(UI)系统的开发以及动画和视觉效果的创造。此外,前端工程师还要确保游戏在不同平台上拥有一致的用户体验,包括桌面和移动设备等。而在实现游戏逻辑方面,开发者需关注游戏中角色的行为、游戏规则的执行、分数与进度的管理以及游戏内的事件响应机制。开发者需要编写高效、无缝的代码,保证游戏玩法顺畅、公平且具备挑战性。
因此,根据以上目标,前端开发者需要利用相关的编程语言(如 C#
、C++
等),使用游戏引擎(如 Unreal、Unity、Source 和 CryEngine 等)创建游戏界面,调整动画实现效果与音效表达效果等。市场上有许多游戏引擎工具供开发者使用,需根据开发人员的具体需求选择具体的游戏引擎工具。不同游戏引擎对于开发者社区的支持侧重点不同,以下为游戏技术研发对游戏引擎选择的偏好与需求:
基于以上需求分析,以下便针对两款代表性的游戏引擎 Unity 和 Unreal Engine 浅要介绍和分析。
C#
或 JavaScript
编写脚本。并且,Unity 提供丰富的资源商店,开发者可以在其中购买和下载各种插件、模型和音效。Unity 的主要优点包括社群活跃、优秀的跨平台兼容性、相对容易上手的开发环境及大量第三方包。开发者们可以自己创立功能包放到 Unity 的官方商店去销售。目前每月超过 150 万开发者浏览商店,共有超过 56,000 个包可以使用。在商业化与变现的角度看,Unity 会更多元化,商业化路径渠道包括 Monetization SDK、Unity 游戏云一站式联网游戏服务、Vivox 游戏语音服务、Multiplay 海外服务器托管服务、Unity 内容分发平台(UDP)、Unity 云构建等多样化的服务。其中,Monetization SDK 供开发者接入,由 Unity 直接担任广告分发门户去分发广告,目前这项服务已经代替引擎商业授权变成了 Unity 的主要收入来源。《逃离塔克夫》《Temtem》《使命召唤》手游以及《炉石传说》等全球知名游戏均证明 Unity 是市面上最优秀游戏引擎之一。然而,Unity 的性能优化相对较差,对于大规模场景和高精度模型的处理能力较为有限。Unity 在 UI 上体验逊于 Unreal,所以开发者必须加入许多第三方包去完善引擎的功能。并且在编程上,Unity 采用了 C#
和 JavaScript
导致了在 Unity 开发过程中会产生部分适应性问题。在 2020 年 3 月,Unity 正式推出了其最新的 2019.3
版本,包括了高清渲染管线 HDRP(High Definition Render Pipeline)和通用渲染管线 URP(Universal Render Pipeline)这两个功能,增强了视觉效果和优化能力。同时增加了特效视图编辑器,实时光纤追踪系统等,让其能够更加适应现在市场的需求并且应用于大型游戏的制作中。据 Medium 与竞核的数据分析,2021 年 Unity 全球市占率达 49.5%,Unreal 全球市占率 9.7%,二者形成双寡头垄断竞争格局。另外一份市场研究报告显示,在 2023 年,Unity 和 Unreal Engine 二者的市占率分别为 48% 和 13%。下表为二者在图形、特征、代码和表现等方面的对比分析。
Source:Incredibuild;Jake 整体分析
在视觉与图像效果层面上,Unreal Engine 能够实现的效果会略优于 Unity,但差距十分微小。从上手角度而言,Unity 对于初学者更易上手,且 Unity 需要的 C#
通常可以实现更快的编译速度和较短的迭代时间;而 Unreal Engine 在动画与图形处理而言,对初学者难度较大。在实际使用过程中,在 Unreal Engine 希望可以实现和达成的效果,同样可以通过 Unity 实现。两款软件均可以通过调用 API 或工具以实现更优质与更高效的图形表现效果。根据统计,在实际操作中,代码工程人员会更偏好 Unity,而对图形与表达要求更高的技术美术师更偏好使用 Unreal Engine。
Unity 实操界面展示;Source:公开市场信息
Unreal Engine 实操界面展示;Source:公开市场信息
同样,针对前端技术开发人员,除 Unity 和 Unreal 外,有其他的游戏引擎可以选择,以下为几款常用的游戏引擎供前端技术人员参考:
不管选用哪一款游戏引擎,前端游戏技术开发人员均需考虑在实际操作中的使用情况。由于 Web3 游戏是消费品,多样的玩法机制(如专注、共情和想象)和沉浸式情感交互体验(如愉悦、恐惧、渴望、成长,悠闲、轻松和惊喜等)是让消费者持续消费的重要前提。下面以游戏过程中的物理模拟与绘制系统(渲染系统/渲染器)为例,分析前端技术人员在使用游戏引擎时需要考虑的技术细节与用户体验问题等。
如果没有精准的物理效果模拟,即使再华丽的游戏也会显得静态而沉闷呆板。游戏中的多样化场景均涉及物理原理和物理引擎。物理引擎是一个组件,将游戏世界对象赋予现实世界物理属性(如重量和形状等),并抽象为刚体模型(包括滑轮和绳索等),使得游戏物体在力的作用下,仿真现实世界的运动及其之间的碰撞过程。即在牛顿经典力学模型基础之上,通过简单的 API 计算游戏物体的运动、旋转和碰撞,现实的运动与碰撞的效果。在计算过程中,应用到运动学和动力学等多个学科的理论和计算。
使用物理引擎,游戏开发者仅需考虑给游戏物体赋予形状(假设为均匀分布)和力,在游戏引擎驱动下自动完成运动与碰撞的计算。并且基于以上对物理引擎的分析,前端技术团队无需探究复杂的运动学知识和碰撞计算与优化,只需在物理引擎输入参数即可。但需要注意的是,为能够高效利用物理引擎,前端技术团队不仅需理解物理运动的基本知识,而且需要洞悉游戏离散仿真产生的特殊现象,以避免游戏失真。有经验的前端技术人员还需要考虑游戏流畅性,思考游戏运行性能等方面问题。
在构建游戏内刚体运动模型前,需考虑如下诸多因素:
因此,基于以上的分析,技术前端团队需设置物体的中心、形状、质量与初始运动方向及轨迹。而且,针对物体重力与运动的情况,物体需重点设置其质心,假设物体模型是匀质且中心与质心重合。在设置物体运动时,需考虑将作用于物体上的力分解为作用中心点上的力与围绕中心点旋转的力矩。其参数设置需符合玩家对物体及运动的认知,以产生沉浸感,否则玩家在游戏过程中会出戏,难以产生沉浸的情绪。下图为力与力矩的分解示意图:
Source:公开市场信息
为了实现逼真的物理行为,游戏中的物体需要正确地加速(即符合人类的认知),并受到碰撞、重力等力的作用。首先要注意的是,在设置3D物体模型运动时,必须判断物体模型是否为凸物体,即在其任意两个顶点间绘制的线不会离开该物体的表面。尽管大多数现实中的物体并非凸的,但在物理模拟中,凸物体常常是理想的近似。物理引擎在计算和模拟碰撞时,凸物体可以更精确地生成被动行为,如碰撞和跌落等。凸碰撞形状在原始碰撞形状和凹碰撞形状之间取得了平衡,能够表示任何复杂形状。通过脚本控制物理,可以为对象提供车辆、机器甚至布料的动态特性。当然,输入的网格可以是凹的,物理引擎会计算其凸部分。根据对象的复杂性,使用多个凸面形状通常比使用凹面碰撞形状能获得更好的性能。Godot 引擎允许通过凸分解生成与空心对象大致匹配的凸形状,但此性能优势在凸面形状数量过多时会减弱。对于大型复杂对象,如整个关卡,建议使用凹形。在建模物体形状时,常用的引用类型有球(SPHERE)、立方体(BOX)、胶囊型(CAPSULE)、圆柱体(CYLINDER)和凸包(CONVEX_HULL)等,可以加入中心点、旋转角度、尺寸等参数,供技术前端使用。
在模拟物体运动时,需要额外的计算过程。导入模型时添加物理引擎可能会失效,因此可以给物体包一个简单的 Mesh,让物体的姿态跟随 Mesh。使用 Babylon 创建的 Mesh 可以直接添加物理属性,也可以自定义 Shader 来创建。尽管自定义 Shader 较为复杂,但实现效果更好。在编辑器的实际操作中,选择网格实例并使用 3D 视口顶部的 Mesh 菜单,可以生成一个或多个凸面碰撞形状。编辑器提供了两种生成模式:
Quickhull
算法,使用自动生成的凸碰撞形状创建一个 ColisionShape 节点。由于只生成单一形状,因此性能较好,适合小型物体模型。V-HACD
算法,可以创建了几个 ColisionShape 节点,每个节点都有一个凸面形状。由于生成多种形状,因此以性能为代价对凹面物体更准确。对于中等复杂度的对象,可能比使用单个凹面碰撞形状更快。而对于凹面碰撞形状,凹形是最慢的选项,但在 Godot 中也是最准确的。只能在 StaticBodies 中使用凹面形状。除非刚体的模式为静态,否则它们不能与KinematicBodies 或 RigidBody 一起使用。当不使用 GridMaps 进行关卡设计时,凹形是关卡碰撞的最佳方法。同时可以在 3D 建模器中构建一个简化的碰撞网格,并让 Godot 自动为其生成碰撞形状。可以通过选择 Meshlnstance 并使用 3D 视口顶部的 Mesh 菜单从编辑器生成凹面碰撞形状。编辑器公开了两个选项:
需要提醒的是,建议保持尽可能少的形状数量以提高性能,尤其是对于 RigidBodies 和 KinematicBodies 等动态对象;避免平移、旋转或缩放 CollisionShapes 以从物理引擎的内部优化中受益。在 StaticBody 中使用单个未转换的碰撞形状时,引擎的宽相位算法可以丢弃不活动的 PhysicsBodies。如果遇到性能问题,必须在准确性方面进行权衡。大多数游戏都没有 100% 准确的碰撞,游戏均找到了创造性的方法来隐藏它或以其他方式使其在正常游戏过程中不显眼。
Source:公开市场信息
Source:公开市场信息
以上内容是以物理模拟部分为案例分析了前端开发者需完成和注意的内容;而下面将以绘制系统(渲染系统/渲染器)为例,分析前端开发者需要完成的事项。绘制系统也是整个游戏引擎中最高和最难的部分之一。在理论上,渲染需要解决两个方面的问题,分别为数学(数学、物理和算法上的正确性)和绘制效果(光照、立体角度、散射、折射和反射等)的准确性,以此让用户产生对游戏的沉浸感。在执行和实践的过程中,需要解决以下四方面的实际问题:
Source:不鸣科技
Source:不鸣科技
根据以上分析,计算是绘制与渲染系统的最重要的核心职能之一,即在数以千万计的顶点与像素、逻辑运算单元及纹理执行运算操作。简单来讲,在具体操作中,三角形构建的多个平面进过投影矩阵后,被投影到屏幕空间上;通过光栅化将顶点数据转换为片元,片元中的每一个元素对应于帧缓冲区中的一个像素,此过程将图转化为栅格组成的二维图像。在着色与绘制过程中,在每个小像素点上,去计算像素点对应的材质和纹理,将像素点渲染成对应的颜色。并且,为了增加沉浸感与真实感,需根据实际情况调整光照及物体的花纹等信息,并渲染出最终的效果,之后将顶点缓冲区和索引缓冲区构建好,再将网格数据传入显卡。以上「投影-光栅化-着色与绘制-后处理与光照运算」的过程即为绘制的过程。
Source:不鸣科技
详细来讲,需渲染的物体与场景具备多样的几何形体、材质、花纹和应用场景等,因此物体与场景在实际渲染的操作中需要具体情况具体分析。一般情况下,模型文件中需保存多个顶点,包含顶点位置、顶点处的法线朝向、顶点的 UV 坐标及其他属性的数据。大部分情况下,计算出每个模型的三角形朝向,然后使用邻近的几个三角形的法向量进行平均,可以得到该顶点的法向量朝向;在实际执行过程中,用索引数据和顶点数据描述模型文件的三角形,将所有的顶点放在一个数组中,只存储了三个顶点的索引位置信息,可以将存储量节约至原存储量的 1/6。
纹理是材质非常重要的一种表达方式。而对于材质类型的感知,很多时候并不是由材质的参数决定的,而是由其纹理所决定的。例如,光滑的金属表面和生锈的非金属表面的视觉表现的区分是通过粗糙度的纹理区分的。在着色与绘制的过程中,纹理采样的性能消耗巨大且复杂,进行一次纹理采样,需要采样 2 x 4,共计 8 个像素点的数据,并且需要 7 次插值运算。值得注意的是,纹理采样需要避免走样等相关问题,避免视角变化导致出现的画面抖动与错位等现象;因此采样时,需取四个点,并对四个点进行插值,同时两层纹理上按照比例采样工作也是必不可少的。
在着色与绘制时,需将各类元素拼接与组合,此时引擎生成的 Shader 代码会被编译成一个二进制的数据块,即一个 Block,其会和网络存储在一起。多样化的网格和 Shader 代码组合后会形成多样的游戏世界。针对同一模型的不同材质,可以分别在各自的子网格内使用各自的材质、纹理和 Shader 代码。由于每个子网格只使用了部分数据,因此只需存储索引缓冲区中的起始位置和结束位置的偏移值。而且,在着色与绘制的实际操作中,为了节约空间,可以共用同一份资源池(如网格池、纹理池等)。值得注意的是,在实例化渲染的过程中,共享一份顶点数据,极大程度上降低显存的使用率,并降低显存带宽。同时,对于要求较高的游戏,实例化的使用需要做其他额外的技术处理,比如单个物体的选择操作等。
而在后处理与光照运算的过程中,需考虑光照强度、光照角度、用户视角、散射与折射、材质对光的吸收程度等多个维度的问题。例如,在 Unity 的 Built-in 管线下,想要完成后处理效果,可以使用后处理插件 Post Processing Stack 实现此目标,也可以使用 OnRenderlmage()
配合 Shader
的方法自定义。此种方法实现对场景使用想要的后处理效果,并且自由度很高,可以随时修改和扩展。在游戏引擎中,光照处理的计算过程较为复杂,可以参考下图对于光照的分析与方程表达,感兴趣的读者可以调参自行尝试。随着游戏产业精细化方面的发展,光照表现有一种成为游戏行业高层次表现的重要趋势,相关渲染技术同样可被运用于动画、电影、虚拟现实等诸多领域。
Source:不鸣科技
Source:不鸣科技
需要补充的是,游戏引擎绘制系统是一类计算机工程科学,需要对显卡的架构、性能、能耗、速度与限制等方面深入理解方能完全发挥出引擎的效果。并且, GPU 拥有极强的高速并行处理能力,可以用低廉的成本形成一组遮挡物的深度图,然后剔除掉部分模型物体,可以优化复杂场景的处理能力。
后端主要工作覆盖服务器端逻辑与数据处理、网络通信与同步等技术解决方案。在服务器的逻辑方面,后端开发者需要负责处理服务器端的逻辑和游戏数据的存储,包括玩家账户的管理、游戏世界的状态同步及多玩家交互的支持等。并且,开发者需设计并实现高效的数据库架构,用于存储游戏进度、玩家成就、虚拟物品等信息。此外,后端系统还需要处理来自游戏客户端的请求,包括玩家之间的互动、玩家的用户数数据、角色的升级和资源的购买等信息请求。Web3 游戏可以参考下图的游戏后端架构。受到传输速度、结算时间等因素的影响,基于当前的通信和加密技术水平,目前大型的 Web3 游戏的后端架构尚未能完全搭建在链上。
Source:公开市场信息
而在游戏的后端开发网络通信与同步方面,后端开发者使用各类型的网络协议,如 TCP/IP、HTTP 及 WebSocket 等,建立稳定的客户端与服务器之间的通信链路。在此开发的过程中,需设计和实现网络协议以支持高频率的数据交换和实时的游戏状态更新。有效的网络通信策略和同步机制,能够减少延迟,确保所有玩家在游戏世界中看到一致的状态。尤其是在网络游戏中,实时数据的传输和同步是保证良好用户体验的核心。
在后端研发时,需注意提升整体的拓展性、稳定性和表现情况。在表现情况方面,后端不仅仅需要在缓存方面做到低延迟和快速计算反馈,而且要求能够在 HTTP 协议方面能够和服务器尽力做到实时沟通;在稳定性和效用方面,各服务器需隔离,以避免单一服务器出现问题而影响全部服务器;而在高拓展性方面,开发者需关注计算容量和功能的拓展,用多个子服务器的单一服务器联接,通过 TCP、IPC 等通道通信,提高服务器对于峰值期内的信息和请求处理能力。下图为技术后端的代表性整体结构示意图,在存储、服务及交互等方面均可参考。
Source:公开市场信息
对于多用户多场景的 Web3 游戏,为保证游戏用户的体验,降低短时间内大量访问请求的压力,开发者可设置多服务器。在各服务器中,多个世界模可组成群,以满足大量用户对游戏的效用。同时,在多服务器的设置中,可以支持大量用户的实时操作,在众多访问和请求的过程中,尽力降低延时。下图为多服务器与世界的参考示意图。
Source:公开市场信息
Web3 游戏的技术前端和后端也并不是完全割裂的状态,在很多方面均需配合才能完成整体的技术支持。例如,在针对外挂方面,前后端技术均可发挥各自拥有的优势,协同配合检测外挂。在前后端技术整体支持的过程中,前端可发挥 Unity 等方面的优势,而后端可发挥数据请求与写入等方面的优势,总体而言在以下方面协同配合:
以上用外挂举例技术前端与后端配合的情况。通过对前端和后端在游戏开发的过程深入了解,理解各自负责不同的任务,但又紧密相连,共同构成了一个完整的游戏系统。一个精彩的游戏体验来源于前端的丰富交互与后端的强大支持。以上仅为部分 Web3 游戏的技术简单介绍,如有读者对更多前后端技术感兴趣,可以参考以下书籍学习更多:
受篇幅限制,本部分对 Web3 游戏部分的美术简要分析。美术在 Web3 游戏中的地位十分重要。优秀的游戏作品不仅仅是一款供人娱乐的游戏,尤其到了 3A 水平,每个高水平的 3A 游戏都是文以载道的艺术作品。针对美术表现形式,游戏工作室会从多个方面提高 Web3 游戏的艺术展现形式,如特效、交互、动画和渲染等多个方面。下表从多个细分方向展示出 Web3 游戏美术表现需考虑之处。由于游戏类型、游戏制作时常和游戏目标人群的不同,Web3 游戏工作室需综合考虑如何在美术表现性方面平衡与取舍。
Source:游鲨游戏圈;Jake 整理
整体而言,游戏的美术风格需符合策划设置的主题与背景,但美术表现的评估与分析相对主观,以下可以用八个角度为例,分析与评估游戏的美术表现:
此外,Web3 游戏皮肤是用户最愿意消费和购买的游戏组件之一。从消费品的角度来看,皮肤、饰品及特效等美术表现是吸引用户购买和消费的核心驱动力之一。差异化的艺术表现形式能够让用户体验到不同的心理感受,游戏用户愿意购买额外的美术产品的心理可以从以下角度分析:
截止 2024 年 Q2 的统计分析,不同地区的用户玩家对美术的偏好不同。美国卡通、漫画、写实的流行比例为 51:5:44,卡通风格流行的原因可能是美式卡通、休闲品类的流行;日本卡通、漫画、写实的流行比例为 35:44:20,对「二次元」的倾向程度达到了八成。
Source:公开市场信息
针对音频与音效方向,当前游戏工作室对音频与音效表现的重视程度因多种因素而有所不同。对于预算充足的大型工作室来说,有能力和时间投入更多资源来完善音频和音效的高质量表现,包括雇佣专业的音频设计师、音乐作曲家和音效工程师,并使用先进的音频技术和设备,以创建沉浸式的音频体验,增强游戏的氛围和情感共鸣。然而,对于预算有限的小型工作室,在音频和音效方面的资源可能相对不足。由于资金和人员的限制,小型工作室可能不得不依赖于现成的音效库或简单的音频设计工具来完成工作。部分小型游戏工作室也采用外包音频与音效的方式来完成。因此,可能导致音频和音效表现的质量不如大型工作室。
同时,音频也会和其他部门合作以提高游戏品质,例如,在音频和文案的合作过程中,音频设计涉及到了 VO 的工作,音频部门会和文案接触多次,从帮助制定角色的演出、决定对话分支的走向,甚至到 VO 阶段时一起协助配音,确保配音需要如何发音以及如何正确传达文案所写的台词。而在音频和地图编辑、动画及特效的配合过程中,其产出需要相互配合,如人物在地图中移动时,需设置人物经过草丛的脚步声,甚至触发地图内重要道具的特效。因此,需要多部门配合,需要大量交流以协调工作,并协商彼此对文件的访问权限,以确保对相同的东西一起展开工作,确保产出内容的高质量。
此外,项目的规模和类型也对音频与音效的投入产生影响。对于以视觉效果或剧情为核心的游戏,音频与音效可能被视为次要元素,投入相对较少。而在那些需要通过音效来增强氛围、构建沉浸感的游戏中,音频设计的重要性则显著提升。
本文是 Web3 游戏分析系列的第二篇工业化生产与制作(技术和美术),敬请期待 Web3 游戏分析系列的下一篇(三)测试与运营。