陳凌超
(福州英華職業學院,福建 福州 350018)
2019年,國務院發布《國家職業教育改革實施方案》。隨后,教育部聯合其他相關部門印制并發布《關于在院校實施“學歷認證+若干職業技能等級證書”制度試點方案》(簡稱“1+X”證書制度試點),3D引擎技術應用職業技能等級認證引發了在校師生的關注,虛擬動畫應用技術專業教學資源庫亟待完善、更新。因此,分析3D游戲引擎構架、游戲動畫渲染技術具有非常重要的意義。
游戲動畫渲染是一種去真實感的方法,即利用類似手繪的效果代替電腦生成的圖像。一般需要專業人員利用專門的卡通渲染著色器使游戲圖像、卡通以及漫畫達到形似且簡潔明了的效果。游戲動畫渲染是計算機圖形學的“副產物”,可以借助.FX文件靈活渲染游戲關卡,保證實際場景與游戲運行階段的效果相同,規避因多次切換渲染程序而導致出現渲染幀率水平下降的問題。還可以根據前期制作的渲染效果庫,以添加C++代碼的方式引用渲染程序模塊,將渲染程序中的參數編碼到模型、紋理以及頂點中,達到提高渲染速率的目的。
在“1+X”證書制度試點的過程中,“1+X”證書職業技能標準與《現世代游戲建模與手繪貼圖》、《專業綜合實訓》等專業課程的實踐內容實現了有效銜接,保證游戲設計實訓滿足行業規范要求。在3D游戲的實訓過程中,3D游戲引擎的組建必不可少。3D游戲引擎主要包括以下5個模塊。
系統模塊是引擎、機器本身開展信息交互的模塊,也是平臺移植時唯一需要進行代碼擴加的模塊。系統模塊一般包括輸入、計時器、圖形、配置以及聲音5個子模塊,可以在主系統內對全部子模塊進行初始化、關閉或更新。其中,輸入子模塊主要負責對游戲板、鍵盤以及游戲手柄等輸入裝置的輸入觸發進行統一控制、接收和處理,通過向輸入子模塊發送請求來獲取玩家位置等信息,從而滿足玩家自由切換的需求。計時器負責為時間觸發開展移動變化提供支持。圖形子模塊則是利用軟件渲染、OpenGL以及Direct3D等工具抽象出“圖形層”并將其放置在API實現層上,以提高系統的兼容性、增強表現效果。配置位于頂端,負責讀取命令行參數、配置記錄文件或進行設置修改,在系統初始化、正式運行期間,配置需要與全部子模塊進行信息交互,為游戲載入、聲音支持選項、按鈕定義、圖像解析度調整以及色深調整提供支持。聲音負責載入、播放3D聲音。
在3D游戲引擎架構中,底層渲染模塊又可劃分為碰撞檢測與反饋、可見裁剪、動態幾何體、靜態幾何體、粒子系統、攝像器、節點陰影、光線、輸出、網格、布告板以及天空體。底層渲染模塊由若干個獨立的軟件工具庫構成,可被引擎上層多次、重復利用,提供最原始的渲染功能,并根據控制臺數據調用圖形API,以完成渲染工作。一般在底層渲染模塊的應用過程中,需要先對其進行封裝,根據OpenGL庫、Direct3D庫從業務渲染提交程序中進行拆解,也可以利用多邊形裁剪算法(Sutherland Hodgman)、基于Voronoi區域的碰撞算法或基于BSP引擎的碰撞檢測算法直接進行操作。
數據存儲模塊包括3D游戲引擎內全部數學成分、文件載入器、存儲管理器以及數據容器等。其中,游戲引擎中數學成分主要為面、點和矩陣等。數據存儲模塊主要負責定義游戲內使用的數據格式、數據組織方式。例如游戲文件內數據存儲組織、游戲運行階段內存數據組織、數據讀取以及保存歷程等。在3D游戲中,數據結構類庫較多,數據結構類庫之間也存在相應的傳遞、保存渠道。例如,在游戲運行階段內存數據組織時,就可以采用指針、鏈表對數據結構類庫關系進行處理,從而滿足數據快速傳遞、即時保存的需求。
控制臺模塊是3D游戲引擎構架的核心模塊,可以通過命令行函數、變量調整來滿足用戶在不重啟的情況下改變游戲引擎設置的需求。從本質上來說,控制臺模塊逐一用于3D引擎設置以及調試。例如,在開發控制臺模塊時,如果需要測試系列命令行變量值,開發人員就要將其輸入控制臺中,快速測試變量是否準確,從而提高開發效率。在3D游戲引擎運行期間,如果出現錯誤,那么技術人員可以在不立即退出程序的情況下對游戲引擎運行錯誤進行簡便控制、“disable”處理,以提高調試效率。
游戲接口模塊多為3D游戲引擎、游戲開發工作者連接端口,游戲開發工作者可以通過游戲接口來利用3D游戲引擎的局部或整體功能。例如,游戲接口模塊可以為游戲渲染模塊的每個子模塊提供接口,從而與系統相關屬性配置模塊(設置、方向和位置)連接,進而根據3D游戲引擎每個部分的動態屬性進行靈活改變。同時,游戲接口模塊還負責連接控制臺與系統模塊,便于控制臺模塊實時修正輸入操作、聲效播放、攝像器、光線、碰撞檢測與反饋等子模塊。一般來說,游戲接口模塊多為對象+圖形界面的形式,也可以通過關卡編輯器設計邏輯腳本語言,便于游戲開發工作者在更高層上編寫游戲事件與方法。
在國家印制并發布《國家職業教育改革實施方案》后,“1+X”證書成為動漫游戲人才培養的主要抓手。“游戲美術設計職業技能等級證書”是游戲及相關專業職業技能等級考試的重要內容,主要考查內容為3D游戲動畫渲染技術,特別是基于Unity軟件的動畫制作與渲染操作。3D游戲動畫渲染技術及應用的要點如下。
CF動畫是一款FPS游戲,中文名為《穿越火線》,部分環節和內容的制作離不開Unity引擎,利用Unity改進傳統動畫流程,以奠定全引擎流程的基礎。與傳統動畫制作時特效、角色以及動畫模塊劃分的模式相比,Unity引擎參與制作的CF動畫是數字資產的組織,Unity二進制文件在同一時刻實現便捷操作的難度較大,此時,就需要從提高效率的角度出發,落實并行分工原則,由導演、執行導演分別利用Cinemachine、Timeline制作鏡頭以及白模Layout場景。對“子彈發射出去”的場景來說,將Cinemachine的Target“綁”到子彈上就可以保證鏡頭隨子彈進行平滑運動。在高模進入尾聲后,因為體型、關節點已確定,所以可以綁定3D Max拓撲低模進行UV劃分,并由材質師在Unity內模擬布料進行ID貼圖,再由地編師利用Unity打包各種主界面、副本場景,將其放入Loading圖,促使一系列游戲對象展示在Hierarchy層級窗口內,完成初版場景的搭建工作并分層輸出序列幀。例如,在港口拍攝場景內需要進行Timelin類型場景拆分,并嵌套“組員”、“組長”以及“導演”3個級別的Timeline,實現出片場景整合的目標。同時,選擇主拍攝場景燈光、拆分區域,并加載多區域燈光的Unity場景。
Unity引擎參與制作CF大動畫的流程如圖1所示。

圖1 Unity引擎參與制作CF大動畫的流程
第一步,封裝標簽,創建1個“Tags”腳本,以const常量的方式對項目內全部待使用標簽進行分裝,局部標簽分裝腳本如下。
Using System.Shoucang;
Using System.tongyongjihe;
Using danyuanfadongji;
Public class Tags{
Public const string wanjia=“wanjia”;//
Public const string youxikongzhiqi=“youxikongzhiqi”;//
Public const string diren=“diren”;//
第二步,為了實現屏幕淡入、淡出的效果,將1個“FadeInOut”空物體創建到場景面板內并加入組件GUI Teture,將顏色設置、Texture分別設置為黑色(black)、swatch_black_dff(在導入資源內搜索)。同時,為FadeInOut創建1個效果實現腳本,局部FadeInOut效果創造腳本如下。
Using system.Shoucang;
Using System.tongyongjihe;
Using danyuanfadongji;
Using danyuanfadongji.shiyongdemingmingkongjian;//shiyongdemingmingren
Public class FadeInOut:danyixingwei
第三步,將標簽(Tag)為GameController的空物體創建到場景面板內,完成按鍵輸入封裝工作。
第四步,將名稱為FP_wanjia的空物體創建到場景面板內,并將空物體在方向的位置設置為16.44,在方向的位置設置為-45.65。同時,加入角色控制組件——character controller,將參數中心內的縱軸()、半徑()分別改為1.0、0.4,使角色控制器控制全部角色行為,完成用戶輸入參數封裝工作。
第五步,創建1個fps_FPInput的腳本并將其拖動到FP_wanjia內,完成用戶輸入參數賦值工作。創建1個主要攝像機(第一人稱)并將其設定到FP_wanjia的子目錄內;同時,新建腳本,完成第一人稱相機控制工作。
第六步,在FP_wanjia物體下進行fps_wanjiaControl腳本創建,完成“none”(無)、“idle”(無用)、“walk”(工作)、“crouch”(低頭)以及“run”(跑動)等角色控制參數定義。同時,將Audio Source組件創建到FP_wanjia內,并將FootstepRouck05(Audio文件夾內)、JumpGeneric分別拖動到AudioClip、JunpAudio(fps_wanjiaControl)內。
Cartoon CG卡通特指以計算機為主要工具,利用3D模擬引擎制作完成的三維動畫短片,具有畫面絢麗、情景真實的特點,例如暴雪公司出產的魔獸爭霸3戰役、星際爭霸2開頭等。在制作CG動畫的過程中,需要利用3D動畫軟件進行虛擬角色搭載,在實現完美手繪表達的同時利用卡通渲染、材質貼圖的方式將三維立體影像渲染為單一顏色、線條展現的二維畫面,降低手動繪制動畫工作量。最后利用手工對渲染后的線條進行修改,獲得個性化模擬手工繪制風格的繪畫。Cartoon CG常用工具為Cel-shading等具有藝術風格的光線渲染算法,可以減少色階數量,用單調的平面色彩(白灰雙色階)代替顏色豐富的漸變色彩。同時,利用維基百科貼圖等多層次漸變采樣貼圖代替代碼幅值顏色,從而豐富細節,進而利用片段光照權重(單位法向量、單位光源朝向向量)進行UV采樣。在該基礎上,為了獲得類似于漫畫書、卡通的獨特紙質紋理,需要運用shader方法對其進行處理。以街頭籃球題材的Cartoon CG卡通渲染為例,根據其充滿動感、電影視聽表達以及手繪動畫的特點,首先,可以利用Low-polygon Moder進行低面數模型建模,盡可能地壓縮“面”的量,從而準確描述形態結構。其次,根據自然運動規律調控角色模型骨骼,使其做出超現實的夸張動作。最后,利用Cel-shading渲染技術,配合3D計算機軟件內虛擬攝像機位置、視點操縱,賦予模型卡通材質并將粗細適當的邊線添加到模型上,對精彩動畫鏡頭進行渲染,凸顯“線”的豐富藝術美感。
除Low-polygon Moder、Cel-shading渲染技術外,Unity在Cartoon CG卡通渲染中也較為常用。在實際應用過程中,首先,需要以Step函數或RampMap貼圖的方式修改光照模型,對NDotL計算蘭伯特光照進行修改。其中,Step函數修改光照模型主要是通過直接給定1個數值,使光照結果在給定數值之間平滑過渡。給定數值標準為,當其大于相應數值時為1,小于相應數值時為0;而RampMap貼圖方式則是將蘭伯特光照視為映射值,利用ramp圖(LUT查找表)的色彩過渡獲得對應的風格化光照。其次,在光照模型修改后,可以在Unity的“Shader Graph”中計算Fresnel 節點,獲得基礎的邊緣光。一般卡通的基礎邊緣光傾向于軟、硬2層邊緣光的混合。深度偏移邊緣光需要將模型頂點偏移后重新對采樣深度進行調整,使調整后模型深度與初始模型深度超過某一值域(邊緣),從而獲得類似于《原神》人物邊緣的亮邊效果。再次,在控制NdotL值實現像素顏色變化的同時要實現卡通著色,就可以在法線區域內進行二值化陰影、頭發投影以及面部陰影操作,使其合并到NDotL內。同時,混合加入高光、頭發與線性光,保證卡通渲染中色彩混合效果。最后,為了獲得整潔的邊緣線,可以利用Unity內的“Sobel算子”進行邊緣檢測,發現多余的描邊信息后,將不同色塊的純色填充到邊緣檢測區。在邊緣線渲染后,可以對Unity內的UV進行打直處理,僅繪制與軸(或軸)呈90°的直線,獲得銳利的本村線。此外,在實際操作過程中,因為卡通渲染特征涉及較多非物理屬性,所以需要根據項目情況對多個差異性特征參數進行取舍。
綜上所述,游戲引擎特指基于通用技術細節整理與封裝的游戲應用程序接口,可以幫助游戲開發工作者縮短開發周期。在“1+X”證書制度試點背景下,游戲引擎的應用備受關注。而渲染是游戲引擎的一部分,根據游戲類型的差異,對3D游戲動畫渲染的要求也具有較大差異。技術操作者應根據游戲類型,選擇適應3D游戲引擎框架的渲染技術。一般CF大動畫可以選擇基于Unity的動畫渲染技術,而CG卡通則可以選擇Cel-shading渲染技術,在規避渲染程序多次、重復切換的同時保證游戲可以高幀率地運行。