3D游戏引擎构架及游戏动画渲染技术分析

2022-03-15 09:42陈凌超
中国新技术新产品 2022年1期
关键词:卡通引擎动画

陈凌超

(福州英华职业学院,福建 福州 350018)

0 前言

2019年,国务院发布《国家职业教育改革实施方案》。随后,教育部联合其他相关部门印制并发布《关于在院校实施“学历认证+若干职业技能等级证书”制度试点方案》(简称“1+X”证书制度试点),3D引擎技术应用职业技能等级认证引发了在校师生的关注,虚拟动画应用技术专业教学资源库亟待完善、更新。因此,分析3D游戏引擎构架、游戏动画渲染技术具有非常重要的意义。

1 游戏动画渲染

游戏动画渲染是一种去真实感的方法,即利用类似手绘的效果代替电脑生成的图像。一般需要专业人员利用专门的卡通渲染着色器使游戏图像、卡通以及漫画达到形似且简洁明了的效果。游戏动画渲染是计算机图形学的“副产物”,可以借助.FX文件灵活渲染游戏关卡,保证实际场景与游戏运行阶段的效果相同,规避因多次切换渲染程序而导致出现渲染帧率水平下降的问题。还可以根据前期制作的渲染效果库,以添加C++代码的方式引用渲染程序模块,将渲染程序中的参数编码到模型、纹理以及顶点中,达到提高渲染速率的目的。

2 3D游戏引擎构架

在“1+X”证书制度试点的过程中,“1+X”证书职业技能标准与《现世代游戏建模与手绘贴图》、《专业综合实训》等专业课程的实践内容实现了有效衔接,保证游戏设计实训满足行业规范要求。在3D游戏的实训过程中,3D游戏引擎的组建必不可少。3D游戏引擎主要包括以下5个模块。

2.1 系统模块

系统模块是引擎、机器本身开展信息交互的模块,也是平台移植时唯一需要进行代码扩加的模块。系统模块一般包括输入、计时器、图形、配置以及声音5个子模块,可以在主系统内对全部子模块进行初始化、关闭或更新。其中,输入子模块主要负责对游戏板、键盘以及游戏手柄等输入装置的输入触发进行统一控制、接收和处理,通过向输入子模块发送请求来获取玩家位置等信息,从而满足玩家自由切换的需求。计时器负责为时间触发开展移动变化提供支持。图形子模块则是利用软件渲染、OpenGL以及Direct3D等工具抽象出“图形层”并将其放置在API实现层上,以提高系统的兼容性、增强表现效果。配置位于顶端,负责读取命令行参数、配置记录文件或进行设置修改,在系统初始化、正式运行期间,配置需要与全部子模块进行信息交互,为游戏载入、声音支持选项、按钮定义、图像解析度调整以及色深调整提供支持。声音负责载入、播放3D声音。

2.2 底层渲染模块

在3D游戏引擎架构中,底层渲染模块又可划分为碰撞检测与反馈、可见裁剪、动态几何体、静态几何体、粒子系统、摄像器、节点阴影、光线、输出、网格、布告板以及天空体。底层渲染模块由若干个独立的软件工具库构成,可被引擎上层多次、重复利用,提供最原始的渲染功能,并根据控制台数据调用图形API,以完成渲染工作。一般在底层渲染模块的应用过程中,需要先对其进行封装,根据OpenGL库、Direct3D库从业务渲染提交程序中进行拆解,也可以利用多边形裁剪算法(Sutherland Hodgman)、基于Voronoi区域的碰撞算法或基于BSP引擎的碰撞检测算法直接进行操作。

2.3 数据存储模块

数据存储模块包括3D游戏引擎内全部数学成分、文件载入器、存储管理器以及数据容器等。其中,游戏引擎中数学成分主要为面、点和矩阵等。数据存储模块主要负责定义游戏内使用的数据格式、数据组织方式。例如游戏文件内数据存储组织、游戏运行阶段内存数据组织、数据读取以及保存历程等。在3D游戏中,数据结构类库较多,数据结构类库之间也存在相应的传递、保存渠道。例如,在游戏运行阶段内存数据组织时,就可以采用指针、链表对数据结构类库关系进行处理,从而满足数据快速传递、即时保存的需求。

2.4 控制台模块

控制台模块是3D游戏引擎构架的核心模块,可以通过命令行函数、变量调整来满足用户在不重启的情况下改变游戏引擎设置的需求。从本质上来说,控制台模块逐一用于3D引擎设置以及调试。例如,在开发控制台模块时,如果需要测试系列命令行变量值,开发人员就要将其输入控制台中,快速测试变量是否准确,从而提高开发效率。在3D游戏引擎运行期间,如果出现错误,那么技术人员可以在不立即退出程序的情况下对游戏引擎运行错误进行简便控制、“disable”处理,以提高调试效率。

2.5 游戏接口模块

游戏接口模块多为3D游戏引擎、游戏开发工作者连接端口,游戏开发工作者可以通过游戏接口来利用3D游戏引擎的局部或整体功能。例如,游戏接口模块可以为游戏渲染模块的每个子模块提供接口,从而与系统相关属性配置模块(设置、方向和位置)连接,进而根据3D游戏引擎每个部分的动态属性进行灵活改变。同时,游戏接口模块还负责连接控制台与系统模块,便于控制台模块实时修正输入操作、声效播放、摄像器、光线、碰撞检测与反馈等子模块。一般来说,游戏接口模块多为对象+图形界面的形式,也可以通过关卡编辑器设计逻辑脚本语言,便于游戏开发工作者在更高层上编写游戏事件与方法。

3 3D游戏动画渲染技术

在国家印制并发布《国家职业教育改革实施方案》后,“1+X”证书成为动漫游戏人才培养的主要抓手。“游戏美术设计职业技能等级证书”是游戏及相关专业职业技能等级考试的重要内容,主要考查内容为3D游戏动画渲染技术,特别是基于Unity软件的动画制作与渲染操作。3D游戏动画渲染技术及应用的要点如下。

3.1 Unity引擎参与制作CF大动画

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)内。

3.2 Cartoon CG卡通渲染

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°的直线,获得锐利的本村线。此外,在实际操作过程中,因为卡通渲染特征涉及较多非物理属性,所以需要根据项目情况对多个差异性特征参数进行取舍。

4 结语

综上所述,游戏引擎特指基于通用技术细节整理与封装的游戏应用程序接口,可以帮助游戏开发工作者缩短开发周期。在“1+X”证书制度试点背景下,游戏引擎的应用备受关注。而渲染是游戏引擎的一部分,根据游戏类型的差异,对3D游戏动画渲染的要求也具有较大差异。技术操作者应根据游戏类型,选择适应3D游戏引擎框架的渲染技术。一般CF大动画可以选择基于Unity的动画渲染技术,而CG卡通则可以选择Cel-shading渲染技术,在规避渲染程序多次、重复切换的同时保证游戏可以高帧率地运行。

猜你喜欢
卡通引擎动画
做个动画给你看
动画发展史
鸡鸣狗盗皮皮猪卡通
我是动画迷
趣味的卡通穿上身
无形的引擎
疯狂看卡通
基于Cocos2d引擎的PuzzleGame开发
One Engine Left只剩下一个引擎