作者:Jake @ Antalpha Ventures, Blake @ Akedo Games, Jawker @ Cipherwave Capital
由于不同研发公司采用的架构(采用项目+中台组织架构)不一样,对项目和中台组织的侧重点不同,有些是强项目,弱中台,有些是强中台,弱项目。因此本系列文章主要按照游戏研发涉及的职能与流程分析。基于此,本系列的第二篇文章主要针对 Web3 Gaming 的工业化生产与制作(美术与技术)方面分析。在游戏立项后,游戏的策划人员已确定核心玩法与可玩性等细节,包括角色成长、玩家行为引导、地图与剧情等。因此,游戏策划需与美术与技术沟通,将 Web3 游戏开发推进到设计与开发阶段。
当策划明确需求后,游戏的前端和后端技术等技术程序团队需实现策划部门提出的游戏设计,编写游戏代码,确保游戏的技术实现。在具体的执行过程中,可以分为前端程序和后端程序。主程需要管理技术的全流程,包括但不限于确定主要技术执行方案、各类性能的优化及指导底层框架的搭建等。
前端程序:覆盖显示、优化与逻辑相关等,包括声音文件、图像文件及文本文件的处理。
后端程序:覆盖服务器端,包括但不限于数据库结构、数据传输、校验、存储和通讯方式等等
下图为 Web3 Gaming 在前端程序和后端程序各部分的展示。后文会详细对两部分详细分析。
游戏的前端程序开发关注游戏界面、交互和用户体验。在交互性与用户体验方面,需要重点关注游戏的交互性和用户体验,这包括游戏界面(UI)的设计与实现、用户交互(UI)系统的开发以及动画和视觉效果的创造。此外,前端工程师还要确保游戏在不同平台上拥有一致的用户体验,包括桌面和移动设备等。而在实现游戏逻辑方面,开发者需关注游戏中角色的行为、游戏规则的执行、分数与进度的管理以及游戏内的事件响应机制。开发者需要编写高效、无缝的代码,保证游戏玩法顺畅、公平且具备挑战性。
因此,根据以上目标,前端开发者需要利用相关的编程语言(如 C#
、C++
等),使用游戏引擎(如 Unreal、Unity、Source 和 CryEngine 等)创建游戏界面,调整动画实现效果与音效表达效果等。市场上有许多游戏引擎工具供开发者使用,需根据开发人员的具体需求选择具体的游戏引擎工具。不同游戏引擎对于开发者社区的支持侧重点不同,以下为游戏技术研发对游戏引擎选择的偏好与需求:
项目需求:不同类型的游戏对引擎的选择要求各异。例如,对于强调视觉效果的 AAA 级游戏,Unreal Engine 或 CryEngine 可能更加合适;而针对移动平台的小型游戏,Unity 可能是更优的选择。
学习曲线与社区支持:一个易于掌握和使用的引擎能显著降低开发难度。此外,活跃的社区能够提供丰富的资源和支持,使开发者在遇到问题时能迅速找到解决方案。
性能与优化:引擎的性能和优化能力对游戏的运行效果至关重要。
成本与授权:某些引擎可能需要付费使用或有特定的授权要求。开发者需根据预算和项目需求进行权衡取舍。
扩展性与定制性:随着游戏行业的持续发展,游戏引擎必须能够适应新的技术趋势和需求。了解引擎的扩展性和定制能力能帮助开发者更好地应对未来的变化。
基于以上需求分析,以下便针对两款代表性的游戏引擎 Unity 和 Unreal Engine 浅要介绍和分析。
Unity 是一款支持多个主流平台的游戏引擎,如 Windows、Mac、iOS、Android 等。Unity 具有高度的可定制性,允许开发者使用 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)这两个功能,增强了视觉效果和优化能力。同时增加了特效视图编辑器,实时光纤追踪系统等,让其能够更加适应现在市场的需求并且应用于大型游戏的制作中。
Unreal Engine 是一款全开源高性能的游戏引擎,以其出色的画面效果和物理引擎而闻名。它支持 C++ 和蓝图可视化编程,提供了强大的材质编辑器和光照系统,可以实现逼真的游戏画面。针对开发者,Unreal 不仅可以免费使用,也可以让其研究代码进一步提升开发效率。并且,Unreal 引擎自带蓝图,所以即使不是技术开发人员,也可以通过点对点的可视化界面完成对游戏的设计。此外,Unreal Engine 具备跨平台兼容性和高度可定制的 UI 系统。在收费上,Unreal 采取了传统的引擎商业模式。第一种收费模式是针对游戏总收入超过 100 万美元的部分收取 5% 的固定提成;而另一种收费模式是在商城售卖官方素材或第三方素材,从中抽取 12% 的收益。在游戏产出与知名度方面,《无主之地》《蝙蝠侠:阿卡姆疯人院》和《最终幻想7重制版》等全球知名游戏均采用了 Unreal 引擎。然而,Unreal Engine 的学习曲线较陡峭,容易上手却不易精通,需要一定的时间和经验方能熟练掌握。
据 Medium 与竞核的数据分析,2021 年 Unity 全球市占率达 49.5%,Unreal 全球市占率 9.7%,二者形成双寡头垄断竞争格局。另外一份市场研究报告显示,在 2023 年,Unity 和 Unreal Engine 二者的市占率分别为 48% 和 13%。下表为二者在图形、特征、代码和表现等方面的对比分析。
在视觉与图像效果层面上,Unreal Engine 能够实现的效果会略优于 Unity,但差距十分微小。从上手角度而言,Unity 对于初学者更易上手,且 Unity 需要的 C#
通常可以实现更快的编译速度和较短的迭代时间;而 Unreal Engine 在动画与图形处理而言,对初学者难度较大。在实际使用过程中,在 Unreal Engine 希望可以实现和达成的效果,同样可以通过 Unity 实现。两款软件均可以通过调用 API 或工具以实现更优质与更高效的图形表现效果。根据统计,在实际操作中,代码工程人员会更偏好 Unity,而对图形与表达要求更高的技术美术师更偏好使用 Unreal Engine。
同样,针对前端技术开发人员,除 Unity 和 Unreal 外,有其他的游戏引擎可以选择,以下为几款常用的游戏引擎供前端技术人员参考:
CryEngine 以高质量的画面效果和强大的物理引擎为人所熟知。它提供了实时全局光照和高质量的模型与材质,为开发者提供了创建真实世界级游戏的可能性。然而, CryEngine 的文档和社区资源相对较少,对于新手来说,可能会有一定的学习难度。
GameMaker Studio 2 是一个游戏开发工具, 可用于制作 2D 或 3D 游戏。有许多工具和编辑器能帮助实现开发者的游戏想法,将最终项目从同样的初始基础资源移植到多个平台上。GameMaker Studio 2 提供了一个直观且易用的拖放(Drag and Drop,简称DnD™) 动作界面图标,允使使用虚拟的代码逻辑创建游戏。同时可以使用脚本语言 GML 创建游戏,甚至可以结合两者,使用 DnD™ 动作调用函数。
Godot Engine 是一款多功能、跨平台的 2D 与 3D 开源游戏引擎,可运行于Windows、macOS、Linux等多种操作系统。而其创建的游戏可运行于 PC、Android、iOS、HTML5 等平台。通过基于节点的架构来设计游戏,3D 渲染器设计可以增强 3D 游戏的画面。具有内置工具的 2D 游戏功能以像素坐标工作,可以掌控 2D 游戏效果。
不管选用哪一款游戏引擎,前端游戏技术开发人员均需考虑在实际操作中的使用情况。由于 Web3 游戏是消费品,多样的玩法机制(如专注、共情和想象)和沉浸式情感交互体验(如愉悦、恐惧、渴望、成长,悠闲、轻松和惊喜等)是让消费者持续消费的重要前提。下面以游戏过程中的物理模拟与绘制系统(渲染系统/渲染器)为例,分析前端技术人员在使用游戏引擎时需要考虑的技术细节与用户体验问题等。
如果没有精准的物理效果模拟,即使再华丽的游戏也会显得静态而沉闷呆板。游戏中的多样化场景均涉及物理原理和物理引擎。物理引擎是一个组件,将游戏世界对象赋予现实世界物理属性(如重量和形状等),并抽象为刚体模型(包括滑轮和绳索等),使得游戏物体在力的作用下,仿真现实世界的运动及其之间的碰撞过程。即在牛顿经典力学模型基础之上,通过简单的 API 计算游戏物体的运动、旋转和碰撞,现实的运动与碰撞的效果。在计算过程中,应用到运动学和动力学等多个学科的理论和计算。
运动学:从几何的角度(指不涉及物体本身的物理性质和加在物体上的力) 描述和研究物体位置随时间的变化规律的力学分支。点的运动学研究点的运动方程、轨迹、位移、速度、加速度等运动特征,以及在不同空间中的变换。运动学是理论力学的一个分支学科,它是运用几何学的方法来研究物体的运动。在工作过程中,前端技术需考虑增加假设前提,尽可能贴近实际物理规则的同时,可以降低计算复杂度。常见的假设前提包括:不考虑外部力作用下的运动、将一个物体作为几何部件,抽象为质点运动模型、仅考虑物体的属性(如位置、速度、角度等)。
动力学:主要研究作用于物体的力与物体运动的关系。动力学的研究对象是运动速度远小于光速的宏观物体。在游戏物理引擎中,主要是涉及刚体动力学方面,包括质点系动力学的基本定理,由动量定理、动量矩定理、动能定理以及由这三个基本定理推导出来的其他一些定理。其中,动量、动量矩和动能是描述质点、质点系和刚体运动的基本物理量。在工作和计算工程中,需要考虑到的因素与假设前提包括:外部力对物体运动的影响、力的作用(重力、阻力和摩擦力等力作用在物体的重量和形状,甚至包括弹性物体)、刚体物体的假设前提及游戏中的物体贴近其在现实世界中的运动等。
使用物理引擎,游戏开发者仅需考虑给游戏物体赋予形状(假设为均匀分布)和力,在游戏引擎驱动下自动完成运动与碰撞的计算。并且基于以上对物理引擎的分析,前端技术团队无需探究复杂的运动学知识和碰撞计算与优化,只需在物理引擎输入参数即可。但需要注意的是,为能够高效利用物理引擎,前端技术团队不仅需理解物理运动的基本知识,而且需要洞悉游戏离散仿真产生的特殊现象,以避免游戏失真。有经验的前端技术人员还需要考虑游戏流畅性,思考游戏运行性能等方面问题。
在构建游戏内刚体运动模型前,需考虑如下诸多因素:
其设置的模型是否为刚体,其受力后的弹性形变程度;
其在运动中或受力作用后,形状与大小是否会发生改变;
其在运动中或受力作用后,物体内部各点的相对位置是否有改变;
因此,基于以上的分析,技术前端团队需设置物体的中心、形状、质量与初始运动方向及轨迹。而且,针对物体重力与运动的情况,物体需重点设置其质心,假设物体模型是匀质且中心与质心重合。在设置物体运动时,需考虑将作用于物体上的力分解为作用中心点上的力与围绕中心点旋转的力矩。其参数设置需符合玩家对物体及运动的认知,以产生沉浸感,否则玩家在游戏过程中会出戏,难以产生沉浸的情绪。下图为力与力矩的分解示意图:
为了实现逼真的物理行为,游戏中的物体需要正确地加速(即符合人类的认知),并受到碰撞、重力等力的作用。首先要注意的是,在设置3D物体模型运动时,必须判断物体模型是否为凸物体,即在其任意两个顶点间绘制的线不会离开该物体的表面。尽管大多数现实中的物体并非凸的,但在物理模拟中,凸物体常常是理想的近似。物理引擎在计算和模拟碰撞时,凸物体可以更精确地生成被动行为,如碰撞和跌落等。凸碰撞形状在原始碰撞形状和凹碰撞形状之间取得了平衡,能够表示任何复杂形状。通过脚本控制物理,可以为对象提供车辆、机器甚至布料的动态特性。当然,输入的网格可以是凹的,物理引擎会计算其凸部分。根据对象的复杂性,使用多个凸面形状通常比使用凹面碰撞形状能获得更好的性能。Godot 引擎允许通过凸分解生成与空心对象大致匹配的凸形状,但此性能优势在凸面形状数量过多时会减弱。对于大型复杂对象,如整个关卡,建议使用凹形。在建模物体形状时,常用的引用类型有球(SPHERE)、立方体(BOX)、胶囊型(CAPSULE)、圆柱体(CYLINDER)和凸包(CONVEX_HULL)等,可以加入中心点、旋转角度、尺寸等参数,供技术前端使用。
在模拟物体运动时,需要额外的计算过程。导入模型时添加物理引擎可能会失效,因此可以给物体包一个简单的 Mesh,让物体的姿态跟随 Mesh。使用 Babylon 创建的 Mesh 可以直接添加物理属性,也可以自定义 Shader 来创建。尽管自定义 Shader 较为复杂,但实现效果更好。在编辑器的实际操作中,选择网格实例并使用 3D 视口顶部的 Mesh 菜单,可以生成一个或多个凸面碰撞形状。编辑器提供了两种生成模式:
创建单凸面碰撞使用 Quickhull
算法,使用自动生成的凸碰撞形状创建一个 ColisionShape 节点。由于只生成单一形状,因此性能较好,适合小型物体模型。
Create Multiple Convex Collision Siblings 使用 V-HACD
算法,可以创建了几个 ColisionShape 节点,每个节点都有一个凸面形状。由于生成多种形状,因此以性能为代价对凹面物体更准确。对于中等复杂度的对象,可能比使用单个凹面碰撞形状更快。
而对于凹面碰撞形状,凹形是最慢的选项,但在 Godot 中也是最准确的。只能在 StaticBodies 中使用凹面形状。除非刚体的模式为静态,否则它们不能与KinematicBodies 或 RigidBody 一起使用。当不使用 GridMaps 进行关卡设计时,凹形是关卡碰撞的最佳方法。同时可以在 3D 建模器中构建一个简化的碰撞网格,并让 Godot 自动为其生成碰撞形状。可以通过选择 Meshlnstance 并使用 3D 视口顶部的 Mesh 菜单从编辑器生成凹面碰撞形状。编辑器公开了两个选项:
Create Trimesh Static Body 创建一个包含与网格几何体相匹配的凹形的 StaticBody。
Create Trimesh Collision Sibling 创建一个 CollisionShape 节点,其凹面形状与网格的几何形状相匹配。
需要提醒的是,建议保持尽可能少的形状数量以提高性能,尤其是对于 RigidBodies 和 KinematicBodies 等动态对象;避免平移、旋转或缩放 CollisionShapes 以从物理引擎的内部优化中受益。在 StaticBody 中使用单个未转换的碰撞形状时,引擎的宽相位算法可以丢弃不活动的 PhysicsBodies。如果遇到性能问题,必须在准确性方面进行权衡。大多数游戏都没有 100% 准确的碰撞,游戏均找到了创造性的方法来隐藏它或以其他方式使其在正常游戏过程中不显眼。
以上内容是以物理模拟部分为案例分析了前端开发者需完成和注意的内容;而下面将以绘制系统(渲染系统/渲染器)为例,分析前端开发者需要完成的事项。绘制系统也是整个游戏引擎中最高和最难的部分之一。在理论上,渲染需要解决两个方面的问题,分别为数学(数学、物理和算法上的正确性)和绘制效果(光照、立体角度、散射、折射和反射等)的准确性,以此让用户产生对游戏的沉浸感。在执行和实践的过程中,需要解决以下四方面的实际问题:
场景复杂:单一场景的多物体在多角度方面的渲染,并在生成每一帧游戏画面时,均需重复多次运算;而多个场景下,多物体在多角度下的渲染会更为复杂;
硬件深度适配:PC、手机等硬件的能力影响了算法的运行及输出。针对硬件,需处理各种耗时的纹理采样工作及较为复杂的数学计算,如正弦、余弦、指数和对数等超越函数运算等。此外,底层执行运算的硬件单元对混合精度运算的支持也是硬件深度适配重点的考虑问题之一;
性能预算:不管游戏画面要求有多高,游戏引擎均需确保游戏画面在 33 毫秒(即 1/30 秒)内完成计算。对于大型深度沉浸的游戏,在较短时间内,游戏画面可能变化较大,但计算时间要求不能缩短。并且,随着游戏产业的发展,游戏在精细程度的要求越来越高,对游戏画面的帧率要求和画幅要求越来越高。每帧的时间预算越来越少,但同时对画质的要求却越来越高;
每帧游戏画面的时间预算分配:在显卡性能的占比方面,GPU 可以比 CPU 的占比更多。图形的渲染算法不能占用超额的 CPU 计算资源,计算资源需分配给系统内其他模块。
根据以上分析,计算是绘制与渲染系统的最重要的核心职能之一,即在数以千万计的顶点与像素、逻辑运算单元及纹理执行运算操作。简单来讲,在具体操作中,三角形构建的多个平面进过投影矩阵后,被投影到屏幕空间上;通过光栅化将顶点数据转换为片元,片元中的每一个元素对应于帧缓冲区中的一个像素,此过程将图转化为栅格组成的二维图像。在着色与绘制过程中,在每个小像素点上,去计算像素点对应的材质和纹理,将像素点渲染成对应的颜色。并且,为了增加沉浸感与真实感,需根据实际情况调整光照及物体的花纹等信息,并渲染出最终的效果,之后将顶点缓冲区和索引缓冲区构建好,再将网格数据传入显卡。以上「投影-光栅化-着色与绘制-后处理与光照运算」的过程即为绘制的过程。
详细来讲,需渲染的物体与场景具备多样的几何形体、材质、花纹和应用场景等,因此物体与场景在实际渲染的操作中需要具体情况具体分析。一般情况下,模型文件中需保存多个顶点,包含顶点位置、顶点处的法线朝向、顶点的 UV 坐标及其他属性的数据。大部分情况下,计算出每个模型的三角形朝向,然后使用邻近的几个三角形的法向量进行平均,可以得到该顶点的法向量朝向;在实际执行过程中,用索引数据和顶点数据描述模型文件的三角形,将所有的顶点放在一个数组中,只存储了三个顶点的索引位置信息,可以将存储量节约至原存储量的 1/6。
纹理是材质非常重要的一种表达方式。而对于材质类型的感知,很多时候并不是由材质的参数决定的,而是由其纹理所决定的。例如,光滑的金属表面和生锈的非金属表面的视觉表现的区分是通过粗糙度的纹理区分的。在着色与绘制的过程中,纹理采样的性能消耗巨大且复杂,进行一次纹理采样,需要采样 2 x 4,共计 8 个像素点的数据,并且需要 7 次插值运算。值得注意的是,纹理采样需要避免走样等相关问题,避免视角变化导致出现的画面抖动与错位等现象;因此采样时,需取四个点,并对四个点进行插值,同时两层纹理上按照比例采样工作也是必不可少的。
在着色与绘制时,需将各类元素拼接与组合,此时引擎生成的 Shader 代码会被编译成一个二进制的数据块,即一个 Block,其会和网络存储在一起。多样化的网格和 Shader 代码组合后会形成多样的游戏世界。针对同一模型的不同材质,可以分别在各自的子网格内使用各自的材质、纹理和 Shader 代码。由于每个子网格只使用了部分数据,因此只需存储索引缓冲区中的起始位置和结束位置的偏移值。而且,在着色与绘制的实际操作中,为了节约空间,可以共用同一份资源池(如网格池、纹理池等)。值得注意的是,在实例化渲染的过程中,共享一份顶点数据,极大程度上降低显存的使用率,并降低显存带宽。同时,对于要求较高的游戏,实例化的使用需要做其他额外的技术处理,比如单个物体的选择操作等。
而在后处理与光照运算的过程中,需考虑光照强度、光照角度、用户视角、散射与折射、材质对光的吸收程度等多个维度的问题。例如,在 Unity 的 Built-in 管线下,想要完成后处理效果,可以使用后处理插件 Post Processing Stack 实现此目标,也可以使用 OnRenderlmage()
配合 Shader
的方法自定义。此种方法实现对场景使用想要的后处理效果,并且自由度很高,可以随时修改和扩展。在游戏引擎中,光照处理的计算过程较为复杂,可以参考下图对于光照的分析与方程表达,感兴趣的读者可以调参自行尝试。随着游戏产业精细化方面的发展,光照表现有一种成为游戏行业高层次表现的重要趋势,相关渲染技术同样可被运用于动画、电影、虚拟现实等诸多领域。
需要补充的是,游戏引擎绘制系统是一类计算机工程科学,需要对显卡的架构、性能、能耗、速度与限制等方面深入理解方能完全发挥出引擎的效果。并且, GPU 拥有极强的高速并行处理能力,可以用低廉的成本形成一组遮挡物的深度图,然后剔除掉部分模型物体,可以优化复杂场景的处理能力。
后端主要工作覆盖服务器端逻辑与数据处理、网络通信与同步等技术解决方案。在服务器的逻辑方面,后端开发者需要负责处理服务器端的逻辑和游戏数据的存储,包括玩家账户的管理、游戏世界的状态同步及多玩家交互的支持等。并且,开发者需设计并实现高效的数据库架构,用于存储游戏进度、玩家成就、虚拟物品等信息。此外,后端系统还需要处理来自游戏客户端的请求,包括玩家之间的互动、玩家的用户数数据、角色的升级和资源的购买等信息请求。Web3 游戏可以参考下图的游戏后端架构。受到传输速度、结算时间等因素的影响,基于当前的通信和加密技术水平,目前大型的 Web3 游戏的后端架构尚未能完全搭建在链上。
而在游戏的后端开发网络通信与同步方面,后端开发者使用各类型的网络协议,如 TCP/IP、HTTP 及 WebSocket 等,建立稳定的客户端与服务器之间的通信链路。在此开发的过程中,需设计和实现网络协议以支持高频率的数据交换和实时的游戏状态更新。有效的网络通信策略和同步机制,能够减少延迟,确保所有玩家在游戏世界中看到一致的状态。尤其是在网络游戏中,实时数据的传输和同步是保证良好用户体验的核心。
在后端研发时,需注意提升整体的拓展性、稳定性和表现情况。在表现情况方面,后端不仅仅需要在缓存方面做到低延迟和快速计算反馈,而且要求能够在 HTTP 协议方面能够和服务器尽力做到实时沟通;在稳定性和效用方面,各服务器需隔离,以避免单一服务器出现问题而影响全部服务器;而在高拓展性方面,开发者需关注计算容量和功能的拓展,用多个子服务器的单一服务器联接,通过 TCP、IPC 等通道通信,提高服务器对于峰值期内的信息和请求处理能力。下图为技术后端的代表性整体结构示意图,在存储、服务及交互等方面均可参考。
对于多用户多场景的 Web3 游戏,为保证游戏用户的体验,降低短时间内大量访问请求的压力,开发者可设置多服务器。在各服务器中,多个世界模可组成群,以满足大量用户对游戏的效用。同时,在多服务器的设置中,可以支持大量用户的实时操作,在众多访问和请求的过程中,尽力降低延时。下图为多服务器与世界的参考示意图。
Web3 游戏的技术前端和后端也并不是完全割裂的状态,在很多方面均需配合才能完成整体的技术支持。例如,在针对外挂方面,前后端技术均可发挥各自拥有的优势,协同配合检测外挂。在前后端技术整体支持的过程中,前端可发挥 Unity 等方面的优势,而后端可发挥数据请求与写入等方面的优势,总体而言在以下方面协同配合:
防加速:服务器验证,客户端配合;
内存数据加密:通过 Unity AssetStore 的插件对客户端内存加密,并降低对客户端内所有数据的依赖程度;
协议 CD:防止频繁访问某个协议。可以对访问的频率限制,如 300 毫秒至 1,000 毫秒只访问一次;
协议加密:协议头增加字节数;
防止 WPE 重复发包:防重复领取与进入;
监控非充值渠道:监控非充值渠道获取货币与资产的情况;
移动与操作防加速:检测逻辑可以放在玩家进程与场景进程中;
以上用外挂举例技术前端与后端配合的情况。通过对前端和后端在游戏开发的过程深入了解,理解各自负责不同的任务,但又紧密相连,共同构成了一个完整的游戏系统。一个精彩的游戏体验来源于前端的丰富交互与后端的强大支持。以上仅为部分 Web3 游戏的技术简单介绍,如有读者对更多前后端技术感兴趣,可以参考以下书籍学习更多:
Web3 游戏程序的数学方面:《Foundations of Game Engine Development, Vol 1: Mathematics》《3D 游戏与计算机图形学中的数学方法》《3D Math Primer for Graphics and Game Development》《Essential Mathematics for Games and Interactive Applications》《Geometric Algebra for Computer Science》《计算机图形学几何工具算法详解》《Visualizing Quaternions》《散度、旋度、梯度释义》、《计算几何》
游戏编程:《Learning Unreal Engine Game Development》《Blueprints Visual Scripting for Unreal Engine》《Introduction to Game Design, Prototyping, and Development》《Unity 5 实战》、《游戏编程算法与技巧》《游戏编程模式》《Cross-Platform Game Programming》《Android NDK Game Development Cookbook》《Building an FPS Game with Unity》《Unity Virtual Reality Projects》《Augmented Reality》《Practical Augmented Reality》《Game Programming Golden Rules》《Best Game Programming Gems》、《Advanced Game Programming》
游戏引擎:《游戏引擎架构》《3D Game Engine Architecture》《3D Game Engine Design》、《游戏脚本高级编程》《编程语言实现模式》《垃圾回收算法手册:自动内存管理的艺术》《Video Game Optimization》《Unity 5 Game Optimization》《算法心得:高效算法的奥秘》《Modern X86 Assembly Language Programming》《GPU Programing for Games and Science》《Vector Games Math Processors》《Game Development Tools》《Designing the User Experience of Game Development Tools》
计算机图形学与渲染:《Real-Time 3D Rendering with DirectX and HLSL》《计算机图形学》《计算机图形学原理与实践:C 语言描述》《Principles of Digital Image Synthesis》《数字图像处理》《3D 游戏编程大师技巧》、《实时阴影技术》《实时计算机图形学》《Real-Time Volume Graphics》《光线跟踪算法与技术》《Physically Based Rendering》《Graphics Programming Methods》《Practical Rendering and Computation with Direct3D》《图形着色器》《OpenGL 着色语言》《OpenGL Insights》《Advanced Global Illumination》《Production Volume Rendering》《Texturing and Modeling》《Polygon Mesh Processing》《Level of Detail for 3D Graphics》、《3D Engine Design for Virtual Globes》《Non-Photorealistic Rendering》、《Isosurfaces》《The Magic of Computer Graphics》
游戏音效:《Game Audio Programming》
游戏物理与动画:《代码本色:用编程模拟自然系统》《Computer Animation》《游戏开发物理学》《Physics Modeling for Game Programers》《Physics Based Animation》《Real-Time Cameras》《Game Inverse Kinematics》《Fluid Engine Development》《Game Physics Pearls》《The Art 藕粉 Fluid Animation》《Fluid Simulation for Computer Graphics》《Collision Detection in Interactive 3D Environments》《实时碰撞检测算法技术》《游戏物理引擎开发》
游戏人工智能:《Artificial Intelligence for Games》《游戏开发中的人工智能》、《游戏人工智能编程案例精粹》《Unity 人工智能游戏开发》《Behavioral Mathematics for Game AI》
多人游戏编程:《Multiplayer Game Programming》《Massively Multiplayer Game Development》《POSIX 多线程程序设计》《大型在线游戏开发》《TCP/IP 详解卷 1-3》
受篇幅限制,本部分对 Web3 游戏部分的美术简要分析。美术在 Web3 游戏中的地位十分重要。优秀的游戏作品不仅仅是一款供人娱乐的游戏,尤其到了 3A 水平,每个高水平的 3A 游戏都是文以载道的艺术作品。针对美术表现形式,游戏工作室会从多个方面提高 Web3 游戏的艺术展现形式,如特效、交互、动画和渲染等多个方面。下表从多个细分方向展示出 Web3 游戏美术表现需考虑之处。由于游戏类型、游戏制作时常和游戏目标人群的不同,Web3 游戏工作室需综合考虑如何在美术表现性方面平衡与取舍。
整体而言,游戏的美术风格需符合策划设置的主题与背景,但美术表现的评估与分析相对主观,以下可以用八个角度为例,分析与评估游戏的美术表现:
美术风格:符合背景与主题风格、独特的艺术表现形式与特定的时间与科技展示;
色彩运用:色彩的调和、象征与对比;
环境设计:环境中的场景细节与氛围感、场景物件的互动性;
角色设计:角色外观、角色动画、角色动作及角色与环境的融合情况;
UI/UX 设计:用户界面设计、界面与美术风格的一致性及信息呈现效果;
动画与特效:流畅性与游戏的表现力、特效的视觉冲击力、音效与视觉效果的融合;
技术实现:现实的物理呈现效果、画质与性能的平衡性;
艺术表现与游戏性:美术对于游戏核心机制的支持、对于其背景与叙事的支持;
此外,Web3 游戏皮肤是用户最愿意消费和购买的游戏组件之一。从消费品的角度来看,皮肤、饰品及特效等美术表现是吸引用户购买和消费的核心驱动力之一。差异化的艺术表现形式能够让用户体验到不同的心理感受,游戏用户愿意购买额外的美术产品的心理可以从以下角度分析:
游戏内额外的资产效用:游戏 NFT 资产可以在 Web3 游戏中给玩家额外的增益效果,包括但不限于攻击、防守、速度与收益加成等方面;
游戏内经济:在一些 Web3 游戏中,皮肤具有交易和交换的价值,用户与套利者可以购买和交易皮肤,甚至通过这种方式获利;
社交因素:在多人在线游戏中,拥有热门或稀有皮肤会引起其他玩家的注意或羡慕,从而增强玩家的优越感与社交体验;
个性化和自我表达:皮肤可以实现定制化的角色外观,通过选择独特的皮肤,玩家可以表达自我个性、风格和喜好;
展示成就或地位:一些稀有或限量版皮肤往往只有在完成特定任务、活动或购买后才能获得,拥有这些皮肤可以展示玩家的成就或游戏中的地位;
截止 2024 年 Q2 的统计分析,不同地区的用户玩家对美术的偏好不同。美国卡通、漫画、写实的流行比例为 51:5:44,卡通风格流行的原因可能是美式卡通、休闲品类的流行;日本卡通、漫画、写实的流行比例为 35:44:20,对「二次元」的倾向程度达到了八成。
针对音频与音效方向,当前游戏工作室对音频与音效表现的重视程度因多种因素而有所不同。对于预算充足的大型工作室来说,有能力和时间投入更多资源来完善音频和音效的高质量表现,包括雇佣专业的音频设计师、音乐作曲家和音效工程师,并使用先进的音频技术和设备,以创建沉浸式的音频体验,增强游戏的氛围和情感共鸣。然而,对于预算有限的小型工作室,在音频和音效方面的资源可能相对不足。由于资金和人员的限制,小型工作室可能不得不依赖于现成的音效库或简单的音频设计工具来完成工作。部分小型游戏工作室也采用外包音频与音效的方式来完成。因此,可能导致音频和音效表现的质量不如大型工作室。
同时,音频也会和其他部门合作以提高游戏品质,例如,在音频和文案的合作过程中,音频设计涉及到了 VO 的工作,音频部门会和文案接触多次,从帮助制定角色的演出、决定对话分支的走向,甚至到 VO 阶段时一起协助配音,确保配音需要如何发音以及如何正确传达文案所写的台词。而在音频和地图编辑、动画及特效的配合过程中,其产出需要相互配合,如人物在地图中移动时,需设置人物经过草丛的脚步声,甚至触发地图内重要道具的特效。因此,需要多部门配合,需要大量交流以协调工作,并协商彼此对文件的访问权限,以确保对相同的东西一起展开工作,确保产出内容的高质量。
此外,项目的规模和类型也对音频与音效的投入产生影响。对于以视觉效果或剧情为核心的游戏,音频与音效可能被视为次要元素,投入相对较少。而在那些需要通过音效来增强氛围、构建沉浸感的游戏中,音频设计的重要性则显著提升。
本文是 Web3 游戏分析系列的第二篇工业化生产与制作(技术和美术),敬请期待 Web3 游戏分析系列的下一篇(三)测试与运营。
声明:本文由入驻金色财经的作者撰写,观点仅代表作者本人,绝不代表金色财经赞同其观点或证实其描述。
提示:投资有风险,入市须谨慎。本资讯不作为投资理财建议。
财富FORTUNE
金融犯罪辩护日记
研报精读
白话区块链
Web3活动