作者:Jake @ Antalpha Ventures, Blake @ Akedo Games, Jawker @ Cipherwave Capital
由于不同研發(fā)公司采用的架構(gòu)(采用項目+中臺組織架構(gòu))不一樣,對項目和中臺組織的側(cè)重點不同,有些是強(qiáng)項目,弱中臺,有些是強(qiáng)中臺,弱項目。因此本系列文章主要按照游戲研發(fā)涉及的職能與流程分析。基于此,本系列的第二篇文章主要針對 Web3 Gaming 的工業(yè)化生產(chǎn)與制作(美術(shù)與技術(shù))方面分析。在游戲立項后,游戲的策劃人員已確定核心玩法與可玩性等細(xì)節(jié),包括角色成長、玩家行為引導(dǎo)、地圖與劇情等。因此,游戲策劃需與美術(shù)與技術(shù)溝通,將 Web3 游戲開發(fā)推進(jìn)到設(shè)計與開發(fā)階段。


當(dāng)策劃明確需求后,游戲的前端和后端技術(shù)等技術(shù)程序團(tuán)隊需實現(xiàn)策劃部門提出的游戲設(shè)計,編寫游戲代碼,確保游戲的技術(shù)實現(xiàn)。在具體的執(zhí)行過程中,可以分為前端程序和后端程序。主程需要管理技術(shù)的全流程,包括但不限于確定主要技術(shù)執(zhí)行方案、各類性能的優(yōu)化及指導(dǎo)底層框架的搭建等。
前端程序:覆蓋顯示、優(yōu)化與邏輯相關(guān)等,包括聲音文件、圖像文件及文本文件的處理。
后端程序:覆蓋服務(wù)器端,包括但不限于數(shù)據(jù)庫結(jié)構(gòu)、數(shù)據(jù)傳輸、校驗、存儲和通訊方式等等
下圖為 Web3 Gaming 在前端程序和后端程序各部分的展示。后文會詳細(xì)對兩部分詳細(xì)分析。

游戲的前端程序開發(fā)關(guān)注游戲界面、交互和用戶體驗。在交互性與用戶體驗方面,需要重點關(guān)注游戲的交互性和用戶體驗,這包括游戲界面(UI)的設(shè)計與實現(xiàn)、用戶交互(UI)系統(tǒng)的開發(fā)以及動畫和視覺效果的創(chuàng)造。此外,前端工程師還要確保游戲在不同平臺上擁有一致的用戶體驗,包括桌面和移動設(shè)備等。而在實現(xiàn)游戲邏輯方面,開發(fā)者需關(guān)注游戲中角色的行為、游戲規(guī)則的執(zhí)行、分?jǐn)?shù)與進(jìn)度的管理以及游戲內(nèi)的事件響應(yīng)機(jī)制。開發(fā)者需要編寫高效、無縫的代碼,保證游戲玩法順暢、公平且具備挑戰(zhàn)性。
因此,根據(jù)以上目標(biāo),前端開發(fā)者需要利用相關(guān)的編程語言(如 C#、C++ 等),使用游戲引擎(如 Unreal、Unity、Source 和 CryEngine 等)創(chuàng)建游戲界面,調(diào)整動畫實現(xiàn)效果與音效表達(dá)效果等。市場上有許多游戲引擎工具供開發(fā)者使用,需根據(jù)開發(fā)人員的具體需求選擇具體的游戲引擎工具。不同游戲引擎對于開發(fā)者社區(qū)的支持側(cè)重點不同,以下為游戲技術(shù)研發(fā)對游戲引擎選擇的偏好與需求:
項目需求:不同類型的游戲?qū)σ娴倪x擇要求各異。例如,對于強(qiáng)調(diào)視覺效果的 AAA 級游戲,Unreal Engine 或 CryEngine 可能更加合適;而針對移動平臺的小型游戲,Unity 可能是更優(yōu)的選擇。
學(xué)習(xí)曲線與社區(qū)支持:一個易于掌握和使用的引擎能顯著降低開發(fā)難度。此外,活躍的社區(qū)能夠提供豐富的資源和支持,使開發(fā)者在遇到問題時能迅速找到解決方案。
性能與優(yōu)化:引擎的性能和優(yōu)化能力對游戲的運行效果至關(guān)重要。
成本與授權(quán):某些引擎可能需要付費使用或有特定的授權(quán)要求。開發(fā)者需根據(jù)預(yù)算和項目需求進(jìn)行權(quán)衡取舍。
擴(kuò)展性與定制性:隨著游戲行業(yè)的持續(xù)發(fā)展,游戲引擎必須能夠適應(yīng)新的技術(shù)趨勢和需求。了解引擎的擴(kuò)展性和定制能力能幫助開發(fā)者更好地應(yīng)對未來的變化。
基于以上需求分析,以下便針對兩款代表性的游戲引擎 Unity 和 Unreal Engine 淺要介紹和分析。
Unity 是一款支持多個主流平臺的游戲引擎,如 Windows、Mac、iOS、Android 等。Unity 具有高度的可定制性,允許開發(fā)者使用 C# 或 JavaScript 編寫腳本。并且,Unity 提供豐富的資源商店,開發(fā)者可以在其中購買和下載各種插件、模型和音效。Unity 的主要優(yōu)點包括社群活躍、優(yōu)秀的跨平臺兼容性、相對容易上手的開發(fā)環(huán)境及大量第三方包。開發(fā)者們可以自己創(chuàng)立功能包放到 Unity 的官方商店去銷售。目前每月超過 150 萬開發(fā)者瀏覽商店,共有超過 56,000 個包可以使用。在商業(yè)化與變現(xiàn)的角度看,Unity 會更多元化,商業(yè)化路徑渠道包括 Monetization SDK、Unity 游戲云一站式聯(lián)網(wǎng)游戲服務(wù)、Vivox 游戲語音服務(wù)、Multiplay 海外服務(wù)器托管服務(wù)、Unity 內(nèi)容分發(fā)平臺(UDP)、Unity 云構(gòu)建等多樣化的服務(wù)。其中,Monetization SDK 供開發(fā)者接入,由 Unity 直接擔(dān)任廣告分發(fā)門戶去分發(fā)廣告,目前這項服務(wù)已經(jīng)代替引擎商業(yè)授權(quán)變成了 Unity 的主要收入來源。《逃離塔克夫》《Temtem》《使命召喚》手游以及《爐石傳說》等全球知名游戲均證明 Unity 是市面上最優(yōu)秀游戲引擎之一。然而,Unity 的性能優(yōu)化相對較差,對于大規(guī)模場景和高精度模型的處理能力較為有限。Unity 在 UI 上體驗遜于 Unreal,所以開發(fā)者必須加入許多第三方包去完善引擎的功能。并且在編程上,Unity 采用了 C# 和 JavaScript 導(dǎo)致了在 Unity 開發(fā)過程中會產(chǎn)生部分適應(yīng)性問題。在 2020 年 3 月,Unity 正式推出了其最新的 2019.3 版本,包括了高清渲染管線 HDRP(High Definition Render Pipeline)和通用渲染管線 URP(Universal Render Pipeline)這兩個功能,增強(qiáng)了視覺效果和優(yōu)化能力。同時增加了特效視圖編輯器,實時光纖追蹤系統(tǒng)等,讓其能夠更加適應(yīng)現(xiàn)在市場的需求并且應(yīng)用于大型游戲的制作中。
Unreal Engine 是一款全開源高性能的游戲引擎,以其出色的畫面效果和物理引擎而聞名。它支持 C++ 和藍(lán)圖可視化編程,提供了強(qiáng)大的材質(zhì)編輯器和光照系統(tǒng),可以實現(xiàn)逼真的游戲畫面。針對開發(fā)者,Unreal 不僅可以免費使用,也可以讓其研究代碼進(jìn)一步提升開發(fā)效率。并且,Unreal 引擎自帶藍(lán)圖,所以即使不是技術(shù)開發(fā)人員,也可以通過點對點的可視化界面完成對游戲的設(shè)計。此外,Unreal Engine 具備跨平臺兼容性和高度可定制的 UI 系統(tǒng)。在收費上,Unreal 采取了傳統(tǒng)的引擎商業(yè)模式。第一種收費模式是針對游戲總收入超過 100 萬美元的部分收取 5% 的固定提成;而另一種收費模式是在商城售賣官方素材或第三方素材,從中抽取 12% 的收益。在游戲產(chǎn)出與知名度方面,《無主之地》《蝙蝠俠:阿卡姆瘋?cè)嗽骸泛汀蹲罱K幻想7重制版》等全球知名游戲均采用了 Unreal 引擎。然而,Unreal Engine 的學(xué)習(xí)曲線較陡峭,容易上手卻不易精通,需要一定的時間和經(jīng)驗方能熟練掌握。
據(jù) Medium 與競核的數(shù)據(jù)分析,2021 年 Unity 全球市占率達(dá) 49.5%,Unreal 全球市占率 9.7%,二者形成雙寡頭壟斷競爭格局。另外一份市場研究報告顯示,在 2023 年,Unity 和 Unreal Engine 二者的市占率分別為 48% 和 13%。下表為二者在圖形、特征、代碼和表現(xiàn)等方面的對比分析。

在視覺與圖像效果層面上,Unreal Engine 能夠?qū)崿F(xiàn)的效果會略優(yōu)于 Unity,但差距十分微小。從上手角度而言,Unity 對于初學(xué)者更易上手,且 Unity 需要的 C# 通常可以實現(xiàn)更快的編譯速度和較短的迭代時間;而 Unreal Engine 在動畫與圖形處理而言,對初學(xué)者難度較大。在實際使用過程中,在 Unreal Engine 希望可以實現(xiàn)和達(dá)成的效果,同樣可以通過 Unity 實現(xiàn)。兩款軟件均可以通過調(diào)用 API 或工具以實現(xiàn)更優(yōu)質(zhì)與更高效的圖形表現(xiàn)效果。根據(jù)統(tǒng)計,在實際操作中,代碼工程人員會更偏好 Unity,而對圖形與表達(dá)要求更高的技術(shù)美術(shù)師更偏好使用 Unreal Engine。


同樣,針對前端技術(shù)開發(fā)人員,除 Unity 和 Unreal 外,有其他的游戲引擎可以選擇,以下為幾款常用的游戲引擎供前端技術(shù)人員參考:
CryEngine 以高質(zhì)量的畫面效果和強(qiáng)大的物理引擎為人所熟知。它提供了實時全局光照和高質(zhì)量的模型與材質(zhì),為開發(fā)者提供了創(chuàng)建真實世界級游戲的可能性。然而, CryEngine 的文檔和社區(qū)資源相對較少,對于新手來說,可能會有一定的學(xué)習(xí)難度。
GameMaker Studio 2 是一個游戲開發(fā)工具, 可用于制作 2D 或 3D 游戲。有許多工具和編輯器能幫助實現(xiàn)開發(fā)者的游戲想法,將最終項目從同樣的初始基礎(chǔ)資源移植到多個平臺上。GameMaker Studio 2 提供了一個直觀且易用的拖放(Drag and Drop,簡稱DnD?) 動作界面圖標(biāo),允使使用虛擬的代碼邏輯創(chuàng)建游戲。同時可以使用腳本語言 GML 創(chuàng)建游戲,甚至可以結(jié)合兩者,使用 DnD? 動作調(diào)用函數(shù)。
Godot Engine 是一款多功能、跨平臺的 2D 與 3D 開源游戲引擎,可運行于Windows、macOS、Linux等多種操作系統(tǒng)。而其創(chuàng)建的游戲可運行于 PC、Android、iOS、HTML5 等平臺。通過基于節(jié)點的架構(gòu)來設(shè)計游戲,3D 渲染器設(shè)計可以增強(qiáng) 3D 游戲的畫面。具有內(nèi)置工具的 2D 游戲功能以像素坐標(biāo)工作,可以掌控 2D 游戲效果。
不管選用哪一款游戲引擎,前端游戲技術(shù)開發(fā)人員均需考慮在實際操作中的使用情況。由于 Web3 游戲是消費品,多樣的玩法機(jī)制(如專注、共情和想象)和沉浸式情感交互體驗(如愉悅、恐懼、渴望、成長,悠閑、輕松和驚喜等)是讓消費者持續(xù)消費的重要前提。下面以游戲過程中的物理模擬與繪制系統(tǒng)(渲染系統(tǒng)/渲染器)為例,分析前端技術(shù)人員在使用游戲引擎時需要考慮的技術(shù)細(xì)節(jié)與用戶體驗問題等。
如果沒有精準(zhǔn)的物理效果模擬,即使再華麗的游戲也會顯得靜態(tài)而沉悶呆板。游戲中的多樣化場景均涉及物理原理和物理引擎。物理引擎是一個組件,將游戲世界對象賦予現(xiàn)實世界物理屬性(如重量和形狀等),并抽象為剛體模型(包括滑輪和繩索等),使得游戲物體在力的作用下,仿真現(xiàn)實世界的運動及其之間的碰撞過程。即在牛頓經(jīng)典力學(xué)模型基礎(chǔ)之上,通過簡單的 API 計算游戲物體的運動、旋轉(zhuǎn)和碰撞,現(xiàn)實的運動與碰撞的效果。在計算過程中,應(yīng)用到運動學(xué)和動力學(xué)等多個學(xué)科的理論和計算。
運動學(xué):從幾何的角度(指不涉及物體本身的物理性質(zhì)和加在物體上的力) 描述和研究物體位置隨時間的變化規(guī)律的力學(xué)分支。點的運動學(xué)研究點的運動方程、軌跡、位移、速度、加速度等運動特征,以及在不同空間中的變換。運動學(xué)是理論力學(xué)的一個分支學(xué)科,它是運用幾何學(xué)的方法來研究物體的運動。在工作過程中,前端技術(shù)需考慮增加假設(shè)前提,盡可能貼近實際物理規(guī)則的同時,可以降低計算復(fù)雜度。常見的假設(shè)前提包括:不考慮外部力作用下的運動、將一個物體作為幾何部件,抽象為質(zhì)點運動模型、僅考慮物體的屬性(如位置、速度、角度等)。
動力學(xué):主要研究作用于物體的力與物體運動的關(guān)系。動力學(xué)的研究對象是運動速度遠(yuǎn)小于光速的宏觀物體。在游戲物理引擎中,主要是涉及剛體動力學(xué)方面,包括質(zhì)點系動力學(xué)的基本定理,由動量定理、動量矩定理、動能定理以及由這三個基本定理推導(dǎo)出來的其他一些定理。其中,動量、動量矩和動能是描述質(zhì)點、質(zhì)點系和剛體運動的基本物理量。在工作和計算工程中,需要考慮到的因素與假設(shè)前提包括:外部力對物體運動的影響、力的作用(重力、阻力和摩擦力等力作用在物體的重量和形狀,甚至包括彈性物體)、剛體物體的假設(shè)前提及游戲中的物體貼近其在現(xiàn)實世界中的運動等。
使用物理引擎,游戲開發(fā)者僅需考慮給游戲物體賦予形狀(假設(shè)為均勻分布)和力,在游戲引擎驅(qū)動下自動完成運動與碰撞的計算。并且基于以上對物理引擎的分析,前端技術(shù)團(tuán)隊無需探究復(fù)雜的運動學(xué)知識和碰撞計算與優(yōu)化,只需在物理引擎輸入?yún)?shù)即可。但需要注意的是,為能夠高效利用物理引擎,前端技術(shù)團(tuán)隊不僅需理解物理運動的基本知識,而且需要洞悉游戲離散仿真產(chǎn)生的特殊現(xiàn)象,以避免游戲失真。有經(jīng)驗的前端技術(shù)人員還需要考慮游戲流暢性,思考游戲運行性能等方面問題。
在構(gòu)建游戲內(nèi)剛體運動模型前,需考慮如下諸多因素:
其設(shè)置的模型是否為剛體,其受力后的彈性形變程度;
其在運動中或受力作用后,形狀與大小是否會發(fā)生改變;
其在運動中或受力作用后,物體內(nèi)部各點的相對位置是否有改變;
因此,基于以上的分析,技術(shù)前端團(tuán)隊需設(shè)置物體的中心、形狀、質(zhì)量與初始運動方向及軌跡。而且,針對物體重力與運動的情況,物體需重點設(shè)置其質(zhì)心,假設(shè)物體模型是勻質(zhì)且中心與質(zhì)心重合。在設(shè)置物體運動時,需考慮將作用于物體上的力分解為作用中心點上的力與圍繞中心點旋轉(zhuǎn)的力矩。其參數(shù)設(shè)置需符合玩家對物體及運動的認(rèn)知,以產(chǎn)生沉浸感,否則玩家在游戲過程中會出戲,難以產(chǎn)生沉浸的情緒。下圖為力與力矩的分解示意圖:

為了實現(xiàn)逼真的物理行為,游戲中的物體需要正確地加速(即符合人類的認(rèn)知),并受到碰撞、重力等力的作用。首先要注意的是,在設(shè)置3D物體模型運動時,必須判斷物體模型是否為凸物體,即在其任意兩個頂點間繪制的線不會離開該物體的表面。盡管大多數(shù)現(xiàn)實中的物體并非凸的,但在物理模擬中,凸物體常常是理想的近似。物理引擎在計算和模擬碰撞時,凸物體可以更精確地生成被動行為,如碰撞和跌落等。凸碰撞形狀在原始碰撞形狀和凹碰撞形狀之間取得了平衡,能夠表示任何復(fù)雜形狀。通過腳本控制物理,可以為對象提供車輛、機(jī)器甚至布料的動態(tài)特性。當(dāng)然,輸入的網(wǎng)格可以是凹的,物理引擎會計算其凸部分。根據(jù)對象的復(fù)雜性,使用多個凸面形狀通常比使用凹面碰撞形狀能獲得更好的性能。Godot 引擎允許通過凸分解生成與空心對象大致匹配的凸形狀,但此性能優(yōu)勢在凸面形狀數(shù)量過多時會減弱。對于大型復(fù)雜對象,如整個關(guān)卡,建議使用凹形。在建模物體形狀時,常用的引用類型有球(SPHERE)、立方體(BOX)、膠囊型(CAPSULE)、圓柱體(CYLINDER)和凸包(CONVEX_HULL)等,可以加入中心點、旋轉(zhuǎn)角度、尺寸等參數(shù),供技術(shù)前端使用。
在模擬物體運動時,需要額外的計算過程。導(dǎo)入模型時添加物理引擎可能會失效,因此可以給物體包一個簡單的 Mesh,讓物體的姿態(tài)跟隨 Mesh。使用 Babylon 創(chuàng)建的 Mesh 可以直接添加物理屬性,也可以自定義 Shader 來創(chuàng)建。盡管自定義 Shader 較為復(fù)雜,但實現(xiàn)效果更好。在編輯器的實際操作中,選擇網(wǎng)格實例并使用 3D 視口頂部的 Mesh 菜單,可以生成一個或多個凸面碰撞形狀。編輯器提供了兩種生成模式:
創(chuàng)建單凸面碰撞使用 Quickhull 算法,使用自動生成的凸碰撞形狀創(chuàng)建一個 ColisionShape 節(jié)點。由于只生成單一形狀,因此性能較好,適合小型物體模型。
Create Multiple Convex Collision Siblings 使用 V-HACD 算法,可以創(chuàng)建了幾個 ColisionShape 節(jié)點,每個節(jié)點都有一個凸面形狀。由于生成多種形狀,因此以性能為代價對凹面物體更準(zhǔn)確。對于中等復(fù)雜度的對象,可能比使用單個凹面碰撞形狀更快。
而對于凹面碰撞形狀,凹形是最慢的選項,但在 Godot 中也是最準(zhǔn)確的。只能在 StaticBodies 中使用凹面形狀。除非剛體的模式為靜態(tài),否則它們不能與KinematicBodies 或 RigidBody 一起使用。當(dāng)不使用 GridMaps 進(jìn)行關(guān)卡設(shè)計時,凹形是關(guān)卡碰撞的最佳方法。同時可以在 3D 建模器中構(gòu)建一個簡化的碰撞網(wǎng)格,并讓 Godot 自動為其生成碰撞形狀。可以通過選擇 Meshlnstance 并使用 3D 視口頂部的 Mesh 菜單從編輯器生成凹面碰撞形狀。編輯器公開了兩個選項:
Create Trimesh Static Body 創(chuàng)建一個包含與網(wǎng)格幾何體相匹配的凹形的 StaticBody。
Create Trimesh Collision Sibling 創(chuàng)建一個 CollisionShape 節(jié)點,其凹面形狀與網(wǎng)格的幾何形狀相匹配。
需要提醒的是,建議保持盡可能少的形狀數(shù)量以提高性能,尤其是對于 RigidBodies 和 KinematicBodies 等動態(tài)對象;避免平移、旋轉(zhuǎn)或縮放 CollisionShapes 以從物理引擎的內(nèi)部優(yōu)化中受益。在 StaticBody 中使用單個未轉(zhuǎn)換的碰撞形狀時,引擎的寬相位算法可以丟棄不活動的 PhysicsBodies。如果遇到性能問題,必須在準(zhǔn)確性方面進(jìn)行權(quán)衡。大多數(shù)游戲都沒有 100% 準(zhǔn)確的碰撞,游戲均找到了創(chuàng)造性的方法來隱藏它或以其他方式使其在正常游戲過程中不顯眼。


以上內(nèi)容是以物理模擬部分為案例分析了前端開發(fā)者需完成和注意的內(nèi)容;而下面將以繪制系統(tǒng)(渲染系統(tǒng)/渲染器)為例,分析前端開發(fā)者需要完成的事項。繪制系統(tǒng)也是整個游戲引擎中最高和最難的部分之一。在理論上,渲染需要解決兩個方面的問題,分別為數(shù)學(xué)(數(shù)學(xué)、物理和算法上的正確性)和繪制效果(光照、立體角度、散射、折射和反射等)的準(zhǔn)確性,以此讓用戶產(chǎn)生對游戲的沉浸感。在執(zhí)行和實踐的過程中,需要解決以下四方面的實際問題:
場景復(fù)雜:單一場景的多物體在多角度方面的渲染,并在生成每一幀游戲畫面時,均需重復(fù)多次運算;而多個場景下,多物體在多角度下的渲染會更為復(fù)雜;
硬件深度適配:PC、手機(jī)等硬件的能力影響了算法的運行及輸出。針對硬件,需處理各種耗時的紋理采樣工作及較為復(fù)雜的數(shù)學(xué)計算,如正弦、余弦、指數(shù)和對數(shù)等超越函數(shù)運算等。此外,底層執(zhí)行運算的硬件單元對混合精度運算的支持也是硬件深度適配重點的考慮問題之一;
性能預(yù)算:不管游戲畫面要求有多高,游戲引擎均需確保游戲畫面在 33 毫秒(即 1/30 秒)內(nèi)完成計算。對于大型深度沉浸的游戲,在較短時間內(nèi),游戲畫面可能變化較大,但計算時間要求不能縮短。并且,隨著游戲產(chǎn)業(yè)的發(fā)展,游戲在精細(xì)程度的要求越來越高,對游戲畫面的幀率要求和畫幅要求越來越高。每幀的時間預(yù)算越來越少,但同時對畫質(zhì)的要求卻越來越高;
每幀游戲畫面的時間預(yù)算分配:在顯卡性能的占比方面,GPU 可以比 CPU 的占比更多。圖形的渲染算法不能占用超額的 CPU 計算資源,計算資源需分配給系統(tǒng)內(nèi)其他模塊。

Source:不鳴科技根據(jù)以上分析,計算是繪制與渲染系統(tǒng)的最重要的核心職能之一,即在數(shù)以千萬計的頂點與像素、邏輯運算單元及紋理執(zhí)行運算操作。簡單來講,在具體操作中,三角形構(gòu)建的多個平面進(jìn)過投影矩陣后,被投影到屏幕空間上;通過光柵化將頂點數(shù)據(jù)轉(zhuǎn)換為片元,片元中的每一個元素對應(yīng)于幀緩沖區(qū)中的一個像素,此過程將圖轉(zhuǎn)化為柵格組成的二維圖像。在著色與繪制過程中,在每個小像素點上,去計算像素點對應(yīng)的材質(zhì)和紋理,將像素點渲染成對應(yīng)的顏色。并且,為了增加沉浸感與真實感,需根據(jù)實際情況調(diào)整光照及物體的花紋等信息,并渲染出最終的效果,之后將頂點緩沖區(qū)和索引緩沖區(qū)構(gòu)建好,再將網(wǎng)格數(shù)據(jù)傳入顯卡。以上「投影-光柵化-著色與繪制-后處理與光照運算」的過程即為繪制的過程。
Source:不鳴科技詳細(xì)來講,需渲染的物體與場景具備多樣的幾何形體、材質(zhì)、花紋和應(yīng)用場景等,因此物體與場景在實際渲染的操作中需要具體情況具體分析。一般情況下,模型文件中需保存多個頂點,包含頂點位置、頂點處的法線朝向、頂點的 UV 坐標(biāo)及其他屬性的數(shù)據(jù)。大部分情況下,計算出每個模型的三角形朝向,然后使用鄰近的幾個三角形的法向量進(jìn)行平均,可以得到該頂點的法向量朝向;在實際執(zhí)行過程中,用索引數(shù)據(jù)和頂點數(shù)據(jù)描述模型文件的三角形,將所有的頂點放在一個數(shù)組中,只存儲了三個頂點的索引位置信息,可以將存儲量節(jié)約至原存儲量的 1/6。
紋理是材質(zhì)非常重要的一種表達(dá)方式。而對于材質(zhì)類型的感知,很多時候并不是由材質(zhì)的參數(shù)決定的,而是由其紋理所決定的。例如,光滑的金屬表面和生銹的非金屬表面的視覺表現(xiàn)的區(qū)分是通過粗糙度的紋理區(qū)分的。在著色與繪制的過程中,紋理采樣的性能消耗巨大且復(fù)雜,進(jìn)行一次紋理采樣,需要采樣 2 x 4,共計 8 個像素點的數(shù)據(jù),并且需要 7 次插值運算。值得注意的是,紋理采樣需要避免走樣等相關(guān)問題,避免視角變化導(dǎo)致出現(xiàn)的畫面抖動與錯位等現(xiàn)象;因此采樣時,需取四個點,并對四個點進(jìn)行插值,同時兩層紋理上按照比例采樣工作也是必不可少的。
在著色與繪制時,需將各類元素拼接與組合,此時引擎生成的 Shader 代碼會被編譯成一個二進(jìn)制的數(shù)據(jù)塊,即一個 Block,其會和網(wǎng)絡(luò)存儲在一起。多樣化的網(wǎng)格和 Shader 代碼組合后會形成多樣的游戲世界。針對同一模型的不同材質(zhì),可以分別在各自的子網(wǎng)格內(nèi)使用各自的材質(zhì)、紋理和 Shader 代碼。由于每個子網(wǎng)格只使用了部分?jǐn)?shù)據(jù),因此只需存儲索引緩沖區(qū)中的起始位置和結(jié)束位置的偏移值。而且,在著色與繪制的實際操作中,為了節(jié)約空間,可以共用同一份資源池(如網(wǎng)格池、紋理池等)。值得注意的是,在實例化渲染的過程中,共享一份頂點數(shù)據(jù),極大程度上降低顯存的使用率,并降低顯存帶寬。同時,對于要求較高的游戲,實例化的使用需要做其他額外的技術(shù)處理,比如單個物體的選擇操作等。
而在后處理與光照運算的過程中,需考慮光照強(qiáng)度、光照角度、用戶視角、散射與折射、材質(zhì)對光的吸收程度等多個維度的問題。例如,在 Unity 的 Built-in 管線下,想要完成后處理效果,可以使用后處理插件 Post Processing Stack 實現(xiàn)此目標(biāo),也可以使用 OnRenderlmage() 配合 Shader 的方法自定義。此種方法實現(xiàn)對場景使用想要的后處理效果,并且自由度很高,可以隨時修改和擴(kuò)展。在游戲引擎中,光照處理的計算過程較為復(fù)雜,可以參考下圖對于光照的分析與方程表達(dá),感興趣的讀者可以調(diào)參自行嘗試。隨著游戲產(chǎn)業(yè)精細(xì)化方面的發(fā)展,光照表現(xiàn)有一種成為游戲行業(yè)高層次表現(xiàn)的重要趨勢,相關(guān)渲染技術(shù)同樣可被運用于動畫、電影、虛擬現(xiàn)實等諸多領(lǐng)域。

Source:不鳴科技需要補充的是,游戲引擎繪制系統(tǒng)是一類計算機(jī)工程科學(xué),需要對顯卡的架構(gòu)、性能、能耗、速度與限制等方面深入理解方能完全發(fā)揮出引擎的效果。并且, GPU 擁有極強(qiáng)的高速并行處理能力,可以用低廉的成本形成一組遮擋物的深度圖,然后剔除掉部分模型物體,可以優(yōu)化復(fù)雜場景的處理能力。
后端主要工作覆蓋服務(wù)器端邏輯與數(shù)據(jù)處理、網(wǎng)絡(luò)通信與同步等技術(shù)解決方案。在服務(wù)器的邏輯方面,后端開發(fā)者需要負(fù)責(zé)處理服務(wù)器端的邏輯和游戲數(shù)據(jù)的存儲,包括玩家賬戶的管理、游戲世界的狀態(tài)同步及多玩家交互的支持等。并且,開發(fā)者需設(shè)計并實現(xiàn)高效的數(shù)據(jù)庫架構(gòu),用于存儲游戲進(jìn)度、玩家成就、虛擬物品等信息。此外,后端系統(tǒng)還需要處理來自游戲客戶端的請求,包括玩家之間的互動、玩家的用戶數(shù)數(shù)據(jù)、角色的升級和資源的購買等信息請求。Web3 游戲可以參考下圖的游戲后端架構(gòu)。受到傳輸速度、結(jié)算時間等因素的影響,基于當(dāng)前的通信和加密技術(shù)水平,目前大型的 Web3 游戲的后端架構(gòu)尚未能完全搭建在鏈上。
Source:公開市場信息而在游戲的后端開發(fā)網(wǎng)絡(luò)通信與同步方面,后端開發(fā)者使用各類型的網(wǎng)絡(luò)協(xié)議,如 TCP/IP、HTTP 及 WebSocket 等,建立穩(wěn)定的客戶端與服務(wù)器之間的通信鏈路。在此開發(fā)的過程中,需設(shè)計和實現(xiàn)網(wǎng)絡(luò)協(xié)議以支持高頻率的數(shù)據(jù)交換和實時的游戲狀態(tài)更新。有效的網(wǎng)絡(luò)通信策略和同步機(jī)制,能夠減少延遲,確保所有玩家在游戲世界中看到一致的狀態(tài)。尤其是在網(wǎng)絡(luò)游戲中,實時數(shù)據(jù)的傳輸和同步是保證良好用戶體驗的核心。
在后端研發(fā)時,需注意提升整體的拓展性、穩(wěn)定性和表現(xiàn)情況。在表現(xiàn)情況方面,后端不僅僅需要在緩存方面做到低延遲和快速計算反饋,而且要求能夠在 HTTP 協(xié)議方面能夠和服務(wù)器盡力做到實時溝通;在穩(wěn)定性和效用方面,各服務(wù)器需隔離,以避免單一服務(wù)器出現(xiàn)問題而影響全部服務(wù)器;而在高拓展性方面,開發(fā)者需關(guān)注計算容量和功能的拓展,用多個子服務(wù)器的單一服務(wù)器聯(lián)接,通過 TCP、IPC 等通道通信,提高服務(wù)器對于峰值期內(nèi)的信息和請求處理能力。下圖為技術(shù)后端的代表性整體結(jié)構(gòu)示意圖,在存儲、服務(wù)及交互等方面均可參考。
Source:公開市場信息對于多用戶多場景的 Web3 游戲,為保證游戲用戶的體驗,降低短時間內(nèi)大量訪問請求的壓力,開發(fā)者可設(shè)置多服務(wù)器。在各服務(wù)器中,多個世界模可組成群,以滿足大量用戶對游戲的效用。同時,在多服務(wù)器的設(shè)置中,可以支持大量用戶的實時操作,在眾多訪問和請求的過程中,盡力降低延時。下圖為多服務(wù)器與世界的參考示意圖。
Source:公開市場信息Web3 游戲的技術(shù)前端和后端也并不是完全割裂的狀態(tài),在很多方面均需配合才能完成整體的技術(shù)支持。例如,在針對外掛方面,前后端技術(shù)均可發(fā)揮各自擁有的優(yōu)勢,協(xié)同配合檢測外掛。在前后端技術(shù)整體支持的過程中,前端可發(fā)揮 Unity 等方面的優(yōu)勢,而后端可發(fā)揮數(shù)據(jù)請求與寫入等方面的優(yōu)勢,總體而言在以下方面協(xié)同配合:
防加速:服務(wù)器驗證,客戶端配合;
內(nèi)存數(shù)據(jù)加密:通過 Unity AssetStore 的插件對客戶端內(nèi)存加密,并降低對客戶端內(nèi)所有數(shù)據(jù)的依賴程度;
協(xié)議 CD:防止頻繁訪問某個協(xié)議。可以對訪問的頻率限制,如 300 毫秒至 1,000 毫秒只訪問一次;
協(xié)議加密:協(xié)議頭增加字節(jié)數(shù);
防止 WPE 重復(fù)發(fā)包:防重復(fù)領(lǐng)取與進(jìn)入;
監(jiān)控非充值渠道:監(jiān)控非充值渠道獲取貨幣與資產(chǎn)的情況;
移動與操作防加速:檢測邏輯可以放在玩家進(jìn)程與場景進(jìn)程中;
以上用外掛舉例技術(shù)前端與后端配合的情況。通過對前端和后端在游戲開發(fā)的過程深入了解,理解各自負(fù)責(zé)不同的任務(wù),但又緊密相連,共同構(gòu)成了一個完整的游戲系統(tǒng)。一個精彩的游戲體驗來源于前端的豐富交互與后端的強(qiáng)大支持。以上僅為部分 Web3 游戲的技術(shù)簡單介紹,如有讀者對更多前后端技術(shù)感興趣,可以參考以下書籍學(xué)習(xí)更多:
Web3 游戲程序的數(shù)學(xué)方面:《Foundations of Game Engine Development, Vol 1: Mathematics》《3D 游戲與計算機(jī)圖形學(xué)中的數(shù)學(xué)方法》《3D Math Primer for Graphics and Game Development》《Essential Mathematics for Games and Interactive Applications》《Geometric Algebra for Computer Science》《計算機(jī)圖形學(xué)幾何工具算法詳解》《Visualizing Quaternions》《散度、旋度、梯度釋義》、《計算幾何》
游戲編程:《Learning Unreal Engine Game Development》《Blueprints Visual Scripting for Unreal Engine》《Introduction to Game Design, Prototyping, and Development》《Unity 5 實戰(zhàn)》、《游戲編程算法與技巧》《游戲編程模式》《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》
游戲引擎:《游戲引擎架構(gòu)》《3D Game Engine Architecture》《3D Game Engine Design》、《游戲腳本高級編程》《編程語言實現(xiàn)模式》《垃圾回收算法手冊:自動內(nèi)存管理的藝術(shù)》《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》
計算機(jī)圖形學(xué)與渲染:《Real-Time 3D Rendering with DirectX and HLSL》《計算機(jī)圖形學(xué)》《計算機(jī)圖形學(xué)原理與實踐:C 語言描述》《Principles of Digital Image Synthesis》《數(shù)字圖像處理》《3D 游戲編程大師技巧》、《實時陰影技術(shù)》《實時計算機(jī)圖形學(xué)》《Real-Time Volume Graphics》《光線跟蹤算法與技術(shù)》《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》
游戲物理與動畫:《代碼本色:用編程模擬自然系統(tǒng)》《Computer Animation》《游戲開發(fā)物理學(xué)》《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》《實時碰撞檢測算法技術(shù)》《游戲物理引擎開發(fā)》
游戲人工智能:《Artificial Intelligence for Games》《游戲開發(fā)中的人工智能》、《游戲人工智能編程案例精粹》《Unity 人工智能游戲開發(fā)》《Behavioral Mathematics for Game AI》
多人游戲編程:《Multiplayer Game Programming》《Massively Multiplayer Game Development》《POSIX 多線程程序設(shè)計》《大型在線游戲開發(fā)》《TCP/IP 詳解卷 1-3》
受篇幅限制,本部分對 Web3 游戲部分的美術(shù)簡要分析。美術(shù)在 Web3 游戲中的地位十分重要。優(yōu)秀的游戲作品不僅僅是一款供人娛樂的游戲,尤其到了 3A 水平,每個高水平的 3A 游戲都是文以載道的藝術(shù)作品。針對美術(shù)表現(xiàn)形式,游戲工作室會從多個方面提高 Web3 游戲的藝術(shù)展現(xiàn)形式,如特效、交互、動畫和渲染等多個方面。下表從多個細(xì)分方向展示出 Web3 游戲美術(shù)表現(xiàn)需考慮之處。由于游戲類型、游戲制作時常和游戲目標(biāo)人群的不同,Web3 游戲工作室需綜合考慮如何在美術(shù)表現(xiàn)性方面平衡與取舍。
Source:游鯊游戲圈;Jake 整理整體而言,游戲的美術(shù)風(fēng)格需符合策劃設(shè)置的主題與背景,但美術(shù)表現(xiàn)的評估與分析相對主觀,以下可以用八個角度為例,分析與評估游戲的美術(shù)表現(xiàn):
美術(shù)風(fēng)格:符合背景與主題風(fēng)格、獨特的藝術(shù)表現(xiàn)形式與特定的時間與科技展示;
色彩運用:色彩的調(diào)和、象征與對比;
環(huán)境設(shè)計:環(huán)境中的場景細(xì)節(jié)與氛圍感、場景物件的互動性;
角色設(shè)計:角色外觀、角色動畫、角色動作及角色與環(huán)境的融合情況;
UI/UX 設(shè)計:用戶界面設(shè)計、界面與美術(shù)風(fēng)格的一致性及信息呈現(xiàn)效果;
動畫與特效:流暢性與游戲的表現(xiàn)力、特效的視覺沖擊力、音效與視覺效果的融合;
技術(shù)實現(xiàn):現(xiàn)實的物理呈現(xiàn)效果、畫質(zhì)與性能的平衡性;
藝術(shù)表現(xiàn)與游戲性:美術(shù)對于游戲核心機(jī)制的支持、對于其背景與敘事的支持;
此外,Web3 游戲皮膚是用戶最愿意消費和購買的游戲組件之一。從消費品的角度來看,皮膚、飾品及特效等美術(shù)表現(xiàn)是吸引用戶購買和消費的核心驅(qū)動力之一。差異化的藝術(shù)表現(xiàn)形式能夠讓用戶體驗到不同的心理感受,游戲用戶愿意購買額外的美術(shù)產(chǎn)品的心理可以從以下角度分析:
游戲內(nèi)額外的資產(chǎn)效用:游戲 NFT 資產(chǎn)可以在 Web3 游戲中給玩家額外的增益效果,包括但不限于攻擊、防守、速度與收益加成等方面;
游戲內(nèi)經(jīng)濟(jì):在一些 Web3 游戲中,皮膚具有交易和交換的價值,用戶與套利者可以購買和交易皮膚,甚至通過這種方式獲利;
社交因素:在多人在線游戲中,擁有熱門或稀有皮膚會引起其他玩家的注意或羨慕,從而增強(qiáng)玩家的優(yōu)越感與社交體驗;
個性化和自我表達(dá):皮膚可以實現(xiàn)定制化的角色外觀,通過選擇獨特的皮膚,玩家可以表達(dá)自我個性、風(fēng)格和喜好;
展示成就或地位:一些稀有或限量版皮膚往往只有在完成特定任務(wù)、活動或購買后才能獲得,擁有這些皮膚可以展示玩家的成就或游戲中的地位;
截止 2024 年 Q2 的統(tǒng)計分析,不同地區(qū)的用戶玩家對美術(shù)的偏好不同。美國卡通、漫畫、寫實的流行比例為 51:5:44,卡通風(fēng)格流行的原因可能是美式卡通、休閑品類的流行;日本卡通、漫畫、寫實的流行比例為 35:44:20,對「二次元」的傾向程度達(dá)到了八成。
Source:公開市場信息針對音頻與音效方向,當(dāng)前游戲工作室對音頻與音效表現(xiàn)的重視程度因多種因素而有所不同。對于預(yù)算充足的大型工作室來說,有能力和時間投入更多資源來完善音頻和音效的高質(zhì)量表現(xiàn),包括雇傭?qū)I(yè)的音頻設(shè)計師、音樂作曲家和音效工程師,并使用先進(jìn)的音頻技術(shù)和設(shè)備,以創(chuàng)建沉浸式的音頻體驗,增強(qiáng)游戲的氛圍和情感共鳴。然而,對于預(yù)算有限的小型工作室,在音頻和音效方面的資源可能相對不足。由于資金和人員的限制,小型工作室可能不得不依賴于現(xiàn)成的音效庫或簡單的音頻設(shè)計工具來完成工作。部分小型游戲工作室也采用外包音頻與音效的方式來完成。因此,可能導(dǎo)致音頻和音效表現(xiàn)的質(zhì)量不如大型工作室。
同時,音頻也會和其他部門合作以提高游戲品質(zhì),例如,在音頻和文案的合作過程中,音頻設(shè)計涉及到了 VO 的工作,音頻部門會和文案接觸多次,從幫助制定角色的演出、決定對話分支的走向,甚至到 VO 階段時一起協(xié)助配音,確保配音需要如何發(fā)音以及如何正確傳達(dá)文案所寫的臺詞。而在音頻和地圖編輯、動畫及特效的配合過程中,其產(chǎn)出需要相互配合,如人物在地圖中移動時,需設(shè)置人物經(jīng)過草叢的腳步聲,甚至觸發(fā)地圖內(nèi)重要道具的特效。因此,需要多部門配合,需要大量交流以協(xié)調(diào)工作,并協(xié)商彼此對文件的訪問權(quán)限,以確保對相同的東西一起展開工作,確保產(chǎn)出內(nèi)容的高質(zhì)量。
此外,項目的規(guī)模和類型也對音頻與音效的投入產(chǎn)生影響。對于以視覺效果或劇情為核心的游戲,音頻與音效可能被視為次要元素,投入相對較少。而在那些需要通過音效來增強(qiáng)氛圍、構(gòu)建沉浸感的游戲中,音頻設(shè)計的重要性則顯著提升。
本文是 Web3 游戲分析系列的第二篇工業(yè)化生產(chǎn)與制作(技術(shù)和美術(shù)),敬請期待 Web3 游戲分析系列的下一篇(三)測試與運營。