




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于Unity3D的独立游戏卡通Shader的研究与实现Research and implementation of indie game cartoon shader based on Unity3D内容摘要近年来,随着游戏行业的迅速发展,各类优秀的的游戏题材、玩法设计层出不穷。国内外游戏厂商百家争鸣的今天,各个游戏公司、工作室都把游戏精品化作为自身的发展出路,画面渲染技术则是游戏质量迈向精品化的重要一环。Untiy3D游戏引擎,以便捷的开发流程、高效的跨平台功能、多样化的插件资源、不断精进的渲染管线支持以及合适的授权条件等因素,得到了许多游戏工作室和中小游戏公司的青睐,开发出Overcoo
2、ked、Ori等优秀画面表现的独立游戏。本次课题主要采用HLSL语言,在ShaderLab以及Shader敏捷开发插件中,实现具有特殊功能的卡通风格游戏美术效果。配合Untiy3D的敏捷开发特性与新输入系统,可以制作出提供不同操作方式的卡通/低聚合风格RPG游戏。希望可以在独立游戏的技术美术开发上,提供一些有益的设计思路与方法。关键词:Unity3D 独立游戏 卡通风格 着色器AbstractIn recent years, with the rapid development of the game industry,various excellent game themes and gam
3、e design have emerged endlessly.With thousands of domestic and foreign game manufacturers contending today, various game companies and studios regard game quality as their own way out, and screen rendering technology is an important part of game quality moving toward quality. Untiy3D game engine has
4、 been favored by many game studios and many kinds sized game companies for its convenient development process, efficient cross-platform functions, diverse plug-in resources, continuous rendering pipeline support, and appropriate licensing conditions. Many independent games with excellent graphics su
5、ch as Overcooked and Ori were produced by it. This project mainly adopts HLSL language, in ShaderLab and Shader agile development plug-ins, to achieve cartoon-style game art effects with special functions. With Untiy3Ds agile development features and new input system, cartoon / low-poly style RPG ga
6、mes can be produced with different operation methods. It is hoped that some useful design ideas and methods can be provided in the technical art development of independent games.Key words:Unity3D IndieGames ToonStyle Shader目录第一章 绪论11.1 选题目的及意义11.2 论文主要内容11.3 论文组织架构2第二章 UnityShader及插件工具32.1 UnityShad
7、er32.1.1 UnityShader与ShaderLab32.1.2 ShaderGraph/Amplify Shader Editor32.2 软件32.2.1 Blender32.2.2 Visual Studio Code32.3 插件42.3.1 Probuilder42.3.2 Polybrush42.3.3 Post-processing4第三章 需求分析与游戏设计53.1技术美术需求53.1.1 人物卡通着色器CelShader53.1.2 水卡通着色器ToonWaterShader73.1.3 雪覆盖SnowCover73.1.4 消融效果Disslove73.1.5 环境
8、73.2技术美术实现原理73.2.1以ShaderLab实现ToonShader73.2.2以ShaderLab实现ToonWaterShader.93.2.3以ShaderLab实现SnowCover.113.2.4 以ShaderGraph实现Disslove.113.3 游戏需求143.3.1 角色143.3.2 信号输入与反馈143.4 游戏设计思路143.4.1 多平台信号输入.143.4.2 以状态机实现角色动作14第四章 技术美术开发174.1 Shader实现174.1.1 ShaderLab基本结构.144.1.2人物卡通着色器CelShader.144.1.3水卡通着色器T
9、oonWaterShader.144.1.4雪覆盖效果SnowCover.144.1.5消融效果Disslove.14第五章 游戏功能实现315.1 角色动画部分315.2 多平台信号输入335.3 环境395.4 角色卡通化425.5 怪物卡通化及消融效果425.6 下雪效果42第六章 闭环与测试45第七章 总结与展望47致谢49广东东软学院本科毕业设计(论文)第1章 绪论1.1 选题目的及意义近年来,随着游戏行业的迅速发展,各类优秀的的游戏题材、玩法设计层出不穷。国内外游戏厂商百家争鸣的今天,各个游戏公司、工作室都把游戏精品化作为自身的发展出路,画面渲染技术则是游戏质量迈向精品化的重要一环
10、。对于传统游戏大厂商而言,他们拥有足够的资源和技术栈使用自研或UE4引擎,以实现更优秀、真实的美术效果,来满足精品游戏的设计需求;然而对于游戏小公司和工作室来说,完善的技术美术支持体系是难以奢求的,因此商业游戏引擎的选择成为了游戏开发准备工作的重要部分。Untiy3D游戏引擎,以便捷的开发流程、高效的跨平台功能、多样化的插件资源、不断精进的渲染管线支持以及合适的授权条件等因素,得到了许多游戏工作室和中小游戏公司的青睐,开发出如Overcooked、Ori等著名的独立游戏。独立游戏,通常由小规模的团队或者个人开发,在资源有限的情况下,难以花费大量时间进行美术资源的创作。但并不意味着独立游戏的美术
11、一定会逊色于大型游戏,通过一些巧妙的技术手段和数学原理,在Untiy3D着色器(Shader)和材质的加持下,不仅可以用少量的资源实现不俗的美术效果与特殊功能,还能节省大量的游戏制作时间成本,实现技术美术的双赢。因此,如何运用部分数学、图形学原理配合High-Level Shader Language(HLSL)进行编码,实现卡通风格的美术效果,成为本次课题研究的目的。 1.2 论文主要内容本次课题主要采用HLSL,在ShaderLab以及Shader敏捷开发插件中,实现具有特殊功能的卡通风格游戏美术效果;在配合Untiy3D的敏捷开发特性与部分设计模式原理下,制作出可供不同操作方式游玩的卡通
12、/低聚合风格RPG游戏。此外,还将结合作者课外实习过程和参加全国数媒设计大赛中的经历,将研究内容落地到实际项目中的情况进行分析探讨。希望可以在独立游戏的技术美术开发上,提供一些有益的设计思路与方法。1.3 论文组织架构为了更好地利用Unity3D引擎与ShaderLab,首先需要阐明其中基本概念、结构与实现原理,结合unity相关组件与功能API,实现设计的卡通风格RPG游戏。论文的研究内容安排如下:第一章绪论:日新月异的游戏行业发展导致了市场对游戏质量的要求水涨船高,比对各大厂商与中小型游戏工作室在面对游戏画面更迭需求时所采用的不同处理方法,思考独立游戏如何利用较少的资源实现更优秀的画面设计
13、,构建课题研究的整体架构。第二章Unityshader及插件工具:介绍ShaderLab、Unity3D相关功能与插件,配合美术软件完成环境设计。功欲善其事,必先利其器,Unity3D中高自由度的插件自定义借口,完善的功能体系,可以根据游戏开发所需,灵活打造合适的开发工具。第三章需求分析与游戏设计:从技术美术的需求出发,研究卡通风格着色器和特殊功能着色器的实现原理。运用计算机图形学中常见的光照模型、数学原理,实现较高完成度的美术效果。此外,在游戏玩法设计上,突出功能着色器的使用,将理论效果落地到实际场景,实践是检验理论的最好方法。第四章技术美术开发:本次课题研究主要使用ShaderLab实现卡
14、通风格着色器、水着色器、雪覆盖着色器;使用ASE等Shader敏捷开发插件,制作具有一定功能的特殊着色器,包括消融效果和拓展着色器WorldPositionShader。最后使用Unity近期推出的Probuilder以及Polybrush插件,快速实现环境原型。第五章游戏功能实现:分为角色、信号输入与反馈、可互动内容、关卡设计四个部分。角色作为玩家可以操控的主体,拥有接收输入信号,经过Untiy3D自带FSM状态机处理,输出正确反馈的功能。第六章闭环与测试:在技术美术与游戏功能都相对完整后,集合全部功能与环境效果,添加Post-processing后处理,让游戏画面更完善。同时,测试第三章提
15、出的,技术美术效果与游戏功能需求能否正常使用。第八章课题总结与展望:对整个课题进行全面总结,说明其中效果实现难点和具有相当可行性的实现方法。总结制作过程中遇到的问题与解决情况,最后是对独立游戏行业的展望。第2章 UnityShader及插件工具2.1 UnityShader2.1.1 UnityShader与ShaderLab在传统渲染自定义渲染流程中,通常需要进行繁琐而冗长的文件设置以及初始化渲染引擎(例如OpenGL),不仅消磨初学者的耐心,也容易因为一些难以注意的细节产生各种不可预料的问题。Unity为了解决这种问题,为开发者提供了一层高级渲染抽象UnityShader,而ShaderL
16、ab则是一种说明性语言,专门用于UnityShader的编写。关于ShaderLab的结构说明与使用方法,将在3.2技术美术实现原理中阐述。2.1.2 ShaderGraph/Amplify Shader Editor为了让开发者可以更直观地构建Shader着色器,真正做到Shader效果实时所见即所得,在Unity2018.2版本中,官方合并了ShaderForge插件引入了ShaedrGraph工具。这个类似于UE4引擎中蓝图的连线功能,通过无代码定义属性再使用节点链接的方式,实现与编写ShaderLab后相同的效果,开发者可以灵活修改各个节点的数值,将Shader编写流程进行简化。遗憾的
17、是,ShaderGraph只能在Unity3D的通用渲染管线(Universal Render Pipeline)或者高清渲染管线(High Definition Render Pipeline)下使用。在ShaderGraph之外,Amplify Shader Editor也是在Unity Shader蓝图化编写工具。在本次课题中,将会分别使用上述两款进行功能Shader实现,讨论它们在游戏开发中的实用场景与方法。2.2 软件2.2.1 BlenderBlender是一款轻量化开源的跨平台3D动画制作软件,提供从建模、动画、材质、渲染、音视频处理等一系列多媒体制作解决方案。在启动速度上,由于
18、体积小巧,启动速度比传统建模软件要快上许多,功能却毫不逊色。Unity支持Blender直接导出的FBX格式模型,使用Blender进行低聚合(LowPoly)模型、材质的敏捷开发,可以有效提升开发效率。在本次课题研究中,主要用到的低聚合材质模型,部分使用Blender进行搭建,另外还有在UnityAssetStore中获取的素材。2.2.2 Visual Studio CodeVisualCode作为VisualStudio的轻量版IDE,在代码编写和Debug功能以及插件扩展性上都有不俗的表现。轻量化的IDE,没有原版面面俱到的功能,但在优秀的拓展支持下,开发者可以轻松导入C#、Unity
19、API、ShaderLab属性等编码提醒的插件,进一步提升开发效率。在独立游戏的制作环境里,是非常适合开发者使用的IDE。2.3 插件2.3.1 ProbuilderProbuilder是Unity出品的3D建模和关卡设计敏捷开发工具,针对构建简单的几何体进行流程优化,还能根据需求对网格进行点线面层级的编辑。在没有任何建模软件配合的前提下,在Unity3D引擎的视窗中进行无缝、直观、高效的白模搭建,配合其中的纹理应用和UV系统,快速构建游戏环境的原型。2.3.2 PolybrushProbuilder是Unity出品的Mesh加工工具,具有类似Unity3D中地形刷的功能,可以在Unity视窗
20、中对Mesh进行着色和纹理覆盖。在最新的迭代版本中,加入了使用高度可定制笔刷进行物体大量放置的功能,对于需要环境中需要大量出现的物体,如树木、花草、石块等环境元素,可以进行批处理。在本次课题开发中,Polybrush插件为环境地面的构建节省了大量时间。2.3.3 Post-processingPost-processing是久经验证的优秀Unity3D相机镜头后处理插件,它将全屏滤镜和效果应用于画面出现在屏幕之前的相机图像缓冲区。包含抗锯齿、环境光遮蔽、光晕、高斯模糊、颜色滤镜、景深、运动模糊等常用功能。在简单的设置下可以对画面效果质量产生不小的提升,本次课题中使用的相关功能与参数,将在第六章
21、闭环与测试中详细阐述。第3章 需求分析与游戏设计3.1技术美术需求3.1.1 人物卡通着色器CelShaderCelShader是一种非真实感渲染样式,旨在使用较少的阴影颜色来使3D模型模仿2D效果,在2017年任天堂推出的塞尔达传说荒野之息便采用了这种渲染方式,配合其中优秀的游戏内容,在全世界享誉盛名。在人物卡通着色器这一节中,将以塞尔达传说荒野之息中Link的人物渲染效果作为艺术风格参考,实现基本的卡通人物着色器,具有接收镜面反射、两个层级的阴影以及边缘高光等功能。图3.1.1 角色表面具有层级阴影、镜面反射以及仅作用于照射方向的边缘高光3.1.2 水卡通着色器ToonWaterShade
22、r在大部分的RPG游戏中,水都是游戏环境必不可少的一部分,不仅能使场景内容更加协调,还能根据游戏需求添加相应的玩法,增强游戏性。但同时,水的渲染一直是游戏开发中具有挑战性的一部分,通过大量复制波纹纹理的水效果,往往生硬且不真实,没有经过仔细调优的镜面反射,甚至会令人产生油腻的感觉。在本节水卡通着色器中,将实现卡通水渲染最常见的几种效果:基于水深为表面着色、水面波纹、边缘泡沫。原理是采用了Unity中的相机深度纹理、法线缓冲区生成水边泡沫,再使用噪声和变形纹理渲染水面波纹,具体实现过程将在Shader实现章节中阐述。图3.1.2 塞尔达中风格化的水体渲染3.1.3 雪覆盖SnowCover雪地场
23、景是游戏中常见的组成元素,那么如何实现皑皑白雪的效果,则成为搭建游戏环境的重要环节。如果让美术重新出一套环境的雪覆盖的效果,不仅增大游戏项目资源包体积,也会增大之后的修改难度。若是后续推出新的环境内容,都要做一套雪覆盖效果的话,将会浪费大量宝贵的游戏开发时间。在本节雪覆盖功能着色器中,将使用Shader实现环境的覆盖雪:具有正确的积雪方向,可调节的雪覆盖程度、颜色。虽然本次研究将在Lowpoly物体上进行效果实现,但依据世界坐标中的法线方向与积雪方向的点积来决定是否积雪的原理,在不同Mesh上都是相通的,因此实际Shader可以在各种物体上进行广泛复用。图3.1.3 岩石的雪覆盖示例3.1.4
24、 消融效果DissloveDisslove效果在很多游戏中都有频繁应用的场景,角色出生时的渐显动画、怪物死亡后的消除动画、物体变换材质的动画等等。在实习以及参加数媒设计竞赛的过程中,我也把这种效果应用到了实际的项目当中,并获得了不错的成效。在上一节雪覆盖中,通过线性代数中的点乘等原理,实现了雪覆盖效果。那么这一节消融效,将编写Disslove Shader,运用噪波图像素点在黑白之间的的随机性,使主贴图在相应的位置逐渐剔除噪声颜色值小于一定阈值的像素。在不占用更多美术资源的情况下,实现雪覆盖和雪融解的灵活切换。图3.1.4 消融效果示例3.1.5 环境本次课题研究中,以体现卡通着色器的功能为主
25、要目的进行环境搭建,具体元素应该具备:可以自由走动的环境地面、卡通样式的水、简单的天气变换等,具体原型将使用Probuilder实现。3.2技术美术实现原理3.2.1 Shader与Material在真正运用UnityShader进行Shader开发前,我们还需要了解Shader与Material的原理。Shader(着色器)实际上是一段程序,功能是将输入的Mesh(网格)以指定的方式与输入的贴图或颜色进行组合,然后输出。单独的UnityShader无法发挥任何作用,将Shader赋予给Material后,我们可以在Unity中直接改动ShaderLab中定义的公开属性内容。最后将Materi
26、al赋予合适的Renderer,即可进行渲染。冯乐乐. Unity Shader 入门精要M. 人民邮电出版社,2016.UnityShader中常见的Shader类型有两种:表面着色器SurfaceShader以及片段着色器FragmentShader。表面着色器是Unity官方以及集成大部分功能的着色器,直接在Unity中加入贴图、属性,即可获得不错的效果;片段着色器则具有更多的功能,可以在Shader的底层进行更复杂、高度自定义的开发。3.2.1以ShaderLab实现CelShaderCelShader的实现,主要部分如下:阴影、环境光、镜面反射、边缘光以及阴影。这几个部分的建立都需要
27、一个定向光,为了计算光照造成的镜面反射,我们使用一个名为Blinn-Phong的通用光照模型,并应用一些其他滤镜使其拥有卡通外观。计算表面从主定向光接收的光量,光量与表面相对于光方向的法线成比例。将光量乘以表面颜色,可得出不同位置表面在光照下的明暗程度。王巍. 猫都能学会的Unity3D Shader入门指南,2013图3.2.1 Blinn-Phong阴影矢量,其中L是光源的矢量,N是表面法线添加环境光,在ShaderLab中自定义一个HDR颜色属性,将其加入最终渲染输出中,方便调整自定义环境光对卡通物体表面的影响。镜面反射,我们使用Bilnn-Pong光照模型。它的前身是Pong模型,Po
28、ng模型在计算镜面反射中,必不可少的步骤是通过若干次的向量乘法与加法计算光的反射向量R,再用R与观察方向的向量求点积,进而得出镜面反射光量。Bilnn-Pong中舍去了计算R的做法,而是通过光照向量与观察方向的相加,计算半矢量;再用半矢量与物体表面法线进行点积,即可得出与Pong模型计算中相同的结果。边缘光,我们使用法线与观察方向的点积进行计算。当二者平行时,点积达到最大值1;当二者趋于垂直时,点积值趋近于0。若将所得点积值与色值相加,对于观察者视角来看,越趋于物体边缘,则物体色值越暗;如果我们将其反转,得到的结果则相反:趋近物体边缘的部分,比中间部分要更亮,这就是边缘光。阴影,为物体添加接收
29、以及投射阴影的功能。使用UsePass,这是一个UnityShader中调用已有Shader内置Pass的方法。为了接收阴影,我们需要在片段着色器中知道物体表面是否在阴影内,采样阴影纹理中的值,并将其作为计算照明的一部分。Autolight.cginc是一个包含采样阴影宏的预设文件,其中SHADOW_ATTENUATION方法可以返回一个0-1之间的值,0表示没有阴影,1则是完全被阴影覆盖。将其乘以法线与光方向的点积,可以反映出物体表面从主定向光接收到的,经过阴影处理的光亮。3.2.2以ShaderLab实现卡通水着色器卡通水着色器的实现,主要分为以下部分:基于水深的颜色渐变、边缘泡沫以及表面
30、波纹。现阶段大多数的卡通水着色器,都停留在单色以及边缘泡沫的阶段,如何让水“动”起来,显得栩栩如生,是我们这一节的主要内容。首先,我们需要水面显示出基于深度的渐变颜色,越深的地方,表面颜色越浅;反之越浅的地方,在不靠近表面边缘的情况下,表面颜色越浅。图3.2.2 表面颜色依据水深进行渐变要实现基于深度的渐变色,我们需要计算水的深度。_CameraDepthTexture是一个内嵌在UnityCG用于访问相机深度纹理的内置方法,通过相机在相机中附加CameraDepthTextureMode组件,着色器中的_CameraDepthTexture变量可以获取当前相机屏幕的深度纹理。通过比对设定的最
31、大渐变深度与水下顶点相对于水面的深度,可以得出一个比例,用saturate函数将其转化为色值原定的0-1之间,配合lerp函数(根据0-1范围内,用第3个值在前者之间进行插值)计算渐变并通过float4返回显示的色值。Roystan.Unity Toon Shader Tutorial. 图3.2.2 深度纹理然后,需要使用噪声纹理为水面添加波浪效果。我们添加一个噪声纹理,将纹理中的UV输入片段着色器,对其进行采样并将其与水的表面颜色组合,渲染波浪效果。同时,我们希望波浪的强度在靠近水面边缘的部分更完整,以此实现泡沫海岸线的效果。利用前面提到的深度纹理,可以根据水的深度调节噪声截止阈值,水边与
32、水面的物体离水面较近,当距离小于一个定值时,阈值固定为1,实现边缘的白色泡沫。单纯的静态波浪无法使水面栩栩如生,我们需要为表面的波浪添加一些运动以及变形效果,通过抵消用于噪声纹理采样的UV可以达成这个目的。定义一个抵消值,将其乘以时间变量_Time.y,分别与采样到的噪声纹理UV分量相加,可以实现滚动的水面波浪效果。但是,动态的水面波浪应该更具有随机性,因此我们需要再添加一张噪声纹理。与法线贴图不同的是,这张纹理只有两个颜色通道,正好与UV分量契合,将其添加到原本的噪声纹理UV中,实现随机的动态波浪。以上,已经阐述了关于固定动态的卡通水面的实现原理,但对于不同的水面物体来说,表面泡沫的大小、宽
33、度并不能达到最好的适应性。显然,这是因为海岸和水之间的深度非常小,但是水和水下物体之间的深度则相对较大。大多数游戏中,不同的物体进入水面是很正常的事情,如何让水面泡沫边缘根据不同的物体以及物体所在的深度进行最佳的泡沫渲染,是接下来要解决的问题。在研究过程中,我参考了一个解决方案,该方案根据水下表面的角度改变泡沫渲染的深度。这样,几乎垂直的表面(如角色的腿、石头等)会比海岸线等非常平坦的物体更容易产生泡沫,在互补的情况下,两边都可以产生相对一致的泡沫。吴亚峰,索依娜. Uinty5.X3D游戏开发技术详解与典型案例M. 北京:人民邮电出版社,2016.根据需求,需要利用水表面法线与物体表面法线之
34、间的角度,来调节水面泡沫的大小。与深度纹理类似,我们可以通过Unity自带的一些相机组件,获取与屏幕大小相同的法线纹理。其次,还需要计算水面的视图空间法线,然后才能将它与渲染到纹理中的法线进行计算。图3.2.2 法线纹理与ToonShader类似,将水表面的法线与水面下的物体法线进行点积计算,当水下表面的法线与水面法线趋近于平行时,计算的结果趋近于1;当它们趋近于垂直时,结果趋近于0。需要注意的是,如果两者角度大于90度,点积将为负,因此我们需要对点积结果进行saturate函数计算,仅返回0-1之间的值。与第一步实现水的渐变颜色相同,使用插值对泡沫大小进行计算,可以得出基于不同物体的不同表面
35、泡沫效果。最后,为了能让玩家看见水下的植物、鱼群,我们应该让水面具有透明质感。Unity ShaderLab的Tags中,Queue标签有专门用于渲染透明着色器的Transparent属性。在渲染队列中,将水的渲染流程排列在所有水下物体之后,以此将透明质感的水覆盖在所有不透明的物体之上,并将它们融合在一起进行混合渲染。3.2.3以ShaderLab实现SnowCover雪地是游戏中常见的应用场景,我们希望能在石头上做出白雪皑皑的效果,需求如下:积雪的方向、雪的颜色以及可以调整的积雪等级(以实现不同积雪量)。雪的颜色以及材质,雪的颜色以及纹理,通过定义两个Sample2D为基础,实现带有漫反射贴
36、图和法线贴图的shader。采用法线贴图的物体,在明暗部分都比单纯使用漫反射贴图的shader拥有更好的表现,凹凸感也更明显。在偏向于真实的游戏表现中,具有法线纹理的材质是必不可少的;Lowpoly和卡通风格游戏中,则更强调场景风格的一致性。积雪的实现思路与卡通着色器光照阴影类似,通过计算物体上的点在世界坐标中的法线方向与设定积雪方向的点积。所得结果必定在(-1,1)之间,当点积小于0,物体表面的点在积雪方向的正面,可以正常积雪,反之则不能积雪。当点积等于0,则物体上的点与下雪方向垂直,处于积雪与否的分界点,此处使用Smoothstep函数,可以柔和积雪边缘,去除生硬的过渡效果。图3.2.3
37、Smoothstep函数曲线(左)线性函数(右)此外,我们需要实现可以调整的积雪等级,以体现不同的积雪量。因此需要使用顶点着色器,以改变物体顶点的坐标位置,让积雪部分看起来“大了一圈”。顶点着色器实现表面偏移的原理,是与表面着色器类似的,我们需要计算世界坐标中实际的积雪方向和当前点的法线值的点积。郭浩瑜. Unity 3D ShaderLab 开发实战详解(第二版)M. 北京:人民邮电出版社,2015.通过lerp插值计算当前点的积雪是否完整,如果当前点与积雪方向一致,并且拥有足够完整的积雪覆盖,则改变该点的模型顶点高度。最后将改变定点高度的值,与积雪等级相乘,实现可以调整的积雪量。3.2.4
38、以ShaderGraph实现Disslove效果Disslove消融效果是一种常见的特效,被大量用于游戏中的角色死亡、烧毁等效果。在这些效果中,消融通常从表面的不同区域开始,并向看似随机的方向扩张,逐渐整个物体消失不见。消融效果看起来很复杂,但其中原理并不难理解。Disslove分为两部分,首先是调整模型的透明度,实现不规则的入场和出场动画。我们需要一个噪声纹理,纹理的每个像素上的都有1个0-1之间的值,当值为1时,纹理为纯白色;当值为0时,纹理为纯黑色。着色器的工作就是遍历这个纹理上的每个像素,并判断它的值是否大于截止阈值(截止阈值根据需求设置),如果大于截至阈值,那么这个点就是可见的;反之
39、,则是不可见的。图3.2.3 透明度截止阈值示意因此,当角色出生时,通过降低截止阈值,我们可以将模型从完全不可见,逐渐变为完全可见;与之相反,当角色死亡倒地时,通过提高截止阈值,模型将从地上逐渐消失。第二部分是溶解边缘,我们需要溶解的边缘带有辉光或烧焦效果,以此在燃尽以及科幻场景中具有具有更优秀的融解表现。Emission是物体的自发光属性,我们使用噪声纹理的采样值,通过step函数CHAMBERLAIN FONG. Analytical Methods for Squaring the DiscEB/OL.2018-11-6,将物体的自发光部分添加在噪声纹理造成的消融部分上,并利用float
40、属性定义一个极小的范围偏移,以此实现辉光或烧焦效果。3.3 游戏需求3.3.1 角色角色作为RPG游戏中玩家操控的主体,在游戏过程中是必不可少的。在这个研究课题中,我们需要实现:游戏同时支持键盘鼠标和手柄的输入模式,基本的人物移动、跳跃、翻滚、攻击、连招以及防御等。3.3.2 信号输入与反馈RPG冒险类独立游戏中,想要跳跃突进的同时释放技能,玩家必须同时连续按下四五个键位。那么仅仅使用键盘鼠标的操作方式,玩家可能按不过来,在紧张刺激的游戏环境中并不能带来最好的操控体验。而专为游戏设计的手柄,通过按键的高度集成特性,玩家可以充分运用自己的手指,在短时间内实现大量操作,在操作要求较高的游戏中也能获
41、得不错的体验。因此,支持手柄操作成为现今独立游戏的一个标配功能。在Unity2019.3版本中,加入了新的Input System,它为开发者切换游戏输入方式,提供了一个便携的解决方案。在这个课题中,我们会使用旧版Input System实现键鼠操控,再使用新版Input System实现Xbox手柄输入,实现基本的游戏操作功能。3.4 游戏设计思路3.4.1 多平台信号输入为了让独立游戏在多平台上都有良好的兼容性,在这个课题中,我们需要实现游戏同时接受键盘和Xbox手柄的操作输入方式。在旧版的Unity Input System中,设置键盘作为输入方式是较为方便的,自带的Horizontal
42、和Vertical属性可以实现角色X轴和Y轴上的移动,配合Input.getKeyDown/Up(keyCode.X)即可检测出各种功能键的输入情况并加入相应动作反馈。但对于跨平台的输入,Unity旧版Input System的支持则不够完善。以Xbox手柄为例,首先我们需要查找该手柄不同按键的Joystick Button值,再将其分别输入到新建的Unity Input中,进行一系列的命名、按键数值调整,最后才能在代码中进行调用并在游戏中正常使用。以奥日萤火意志为例,从键盘到手柄的跨平台移植,在查找到Button Map的前提下,从1-8号的按键、AxisX/Y、Axis3X/3Y、Axis
43、6X/6Y都要分别设置。图3.4.1 Xbox Joystick 按键值此外,旧版Input输入系统中,并没有能支持轻点、长按、双击等游戏常见操作的内置支持,我们需要定义计时器类和按键类,再让键盘和手柄输入模块中的每个按键分别实例化按键类,最后将输入信号传递到Input类中,实现相应的操作功能。在新版Input System中,我们只需要在Unity中设置三个部分,分别是Action Map、Actions和Properties。Action Map是不同Actions的集合,而Actions则是不同按键的集合,Properties可以定义按键的属性以及操作方式。值得注意的是,Properti
44、es中的Binding属性用于定义按键本身,它集成了按键监听功能,只需插上手柄并进入监听模式,点击手柄按键即可自动识别,不需要查找Button Map再进行设置。Interactions属性用于定义按键的操作方式,集成了常用的按键轻击、长按、双击、组合键等操作,通过调整默认的属性值,可以快捷自定义开发者想要的按键操作方式,而无需消耗时间进行按键和计时器类的撰写。3.4.2 以状态机实现角色动作实现角色动作之前,我们需要有与角色骨骼相匹配的动画(走、跑、跳等),将动画Animation附加在角色模型上,角色即可根据动画执行相应的动作。但是,此时的动作无法让玩家进行操控,也无法在不同的动作动画之间
45、进行切换。因此,我们需要一个控制器,可以集成所需的所有动画并通过一些条件让角色在不同动画之间进行自由切换。FSM有限状态机是一种切换物体状态的标准解决方案。物体在任意时刻都处于有限状态集合中的某一个状态,当它满足某一个或多个预设条件时,将从当前状态转换为另一个状态。SANZGEN. 3ds Max CG animation rise techniqueM. Tokyo:BNN, Inc.,2006.在Unity3D游戏引擎中,已经集成了一个通用的有限角色动画状态机Animator Controller,可以将物体所有需要的动画集成其中,通过特定的一个或多个条件进行动画切换,配合相应的模型位移,可以实现所有物体所需要的移动等效果。第4章 技术美术开发4.1 Shader实现4.1.1 ShaderLab基本结构在ShaderLab相比传统Shader的结构来说,已经有了充分的简化,但实际应用的专业化还是非常强的,因此在诞生之初,就人为规定了它的基本结构,以下采用本次课题所使用到的顶点/片段着色
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高分攻略的证券从业资格证试题及答案
- 逐步提高2025年证券从业资格证考试试题及答案
- 财务深度分析案例研究试题及答案
- 2025年国际金融理财师考试的多元化投资策略试题及答案
- 专家论证施工方案的流程
- 2025年审计核心技能试题及答案
- 2024年微生物实验室的统计应用试题及答案
- 桩基补强注浆施工方案
- 畜牧业市场动态分析与预测考核试卷
- 社会心理学与职场沟通技巧考核试卷
- 人教版高中英语选择性必修第三册课件Unit 5 Poems
- 国家移民管理局直属事业单位公开招考24名工作人员【共500题含答案解析】模拟检测试卷
- 小白兔拔萝卜课件
- 房树人心理画绘画分析(附图)-课件
- 2023年苏州风景园林投资发展集团有限公司招聘笔试题库及答案解析
- 2023年河南推拿职业学院单招考试面试模拟试题及答案解析
- 现代生物技术与人类健康课件
- 篮球裁判法(裁判手势)课件
- 野外生存2-1课件
- 辞职报告辞职信
- 2021年新湘教版九年级数学中考总复习教案
评论
0/150
提交评论