版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章资源【本章学习要点】音频及脚本控制音频灯光及脚本控制灯光材质贴图及脚本控制材质贴图摄像机及应用9.1音频大多数游戏需要播放背景音乐和音效,Unity提供了音频系统以实现这些功能。Unity的音频系统既灵活又强大,可以导入和播放各种不同的音频文件格式,并对音频文件进行编辑控制,并支持3D音效,还可根据需要提供其他效果,比如回声和滤波等。9.1.1音频概述1.音频作用“如果游戏是一个人,那么策划是灵魂,程序是骨架,美术是肌肉,声音是血液。”这句话说明了游戏是一门多学科综合的艺术,一个项目和作品能够给用户带来直接影响的是美术和声音,美术是视觉体验,声音是听觉体验。所以音频是游戏设计和开发流程中不可缺少的一环,通常在游戏创作的最后阶段添加。游戏的音频可以起到烘托游戏环境气氛、突出故事情节、辨别对象位置等作用。9.1.1音频概述2.音频分类游戏音频分为两类:背景音乐和环境音效。背景音乐在游戏运行过程中循环播放,一般是时间较长的音频。环境音效(特效音)一般用于游戏场景中对象发出的声音,一般是时间较短的音频。(a)背景音乐
(b)环境音效(特效音)图9-1音频分类9.1.2音频系统Unity音频系统由音频剪辑、音频源、音频监听器、混音器等组成。1.音频剪辑(AudioClip)被导入到Unity中的音频文件称为音频剪辑。Unity支持的音频文件格式有Wav、Aiff、MP3、Ogg等多种。前两种适合用作环境音效,后两种适合用作背景音乐。音频资源有压缩和不压缩两种方式。不进行压缩的音频将采用音频源文件,而采用压缩的音频文件会对音频进行压缩,压缩操作会减少音频文件的大小,但是在播放时需要额外的CPU资源进行解码,所以需要制作快速反应的音效时,最好使用不压缩方式,而背景音乐可以使用压缩的音频文件。任何格式的音频文件被导入Unity后,在内部自动转化成.ogg格式。9.1.2音频系统Ogg全称是OggVorbis,是一种新的音频压缩格式,类似MP3等音频格式,但完全免费开放,没有专利限制。同样位速率(BitRate)编码的Ogg与MP3相比听起来音质更好一些,对于用户来说,使用Ogg音频文件的显著好处是可以用更小的文件获得优越的声音质量。OggVorbis支持VBR(可变比特率)和ABR(平均比特率)两种编码方式,Ogg还具有比特率缩放功能,可以不用重新编码便可调节文件的比特率。Ogg格式可以对所有声道进行编码,支持多声道模式,多声道音乐会带来更多临场感。Unity还能够导入.xm、.mod、.it和.s3m格式的音轨模块,这些模块使用短音频样本作为“编曲”,然后进行安排以播放曲调。音轨模块资源的使用方法与Unity中的其他音频资源相同,但在Inspector面板中无法预览音频的波形。9.1.2音频系统2.音频剪辑的导入音频剪辑也是一种资源,导入方法和模型、图像等资源导入方式类似。将音频文件或音频文件所在文件夹,拖动到Assets中即可。在Assets面板中选中一个音频文件资源,在右侧的Inspector面板中会显示音频文件导入设置选项,可以对导入的音频文件剪辑进行相关设置,比如强制单声道,加载是否压缩,压缩格式,采样率设置等。还可以查看音频文件导入Unity前后的文件大小和压缩比。LoadType(加载类型)有三个选项:①DecompressOnLoad(场景加载时音频解压缩)②CompressedInMemory(音频以压缩格式加载到内存)③Streaming(流式音频)。CompressionFormat(压缩格式)有三个选项:①PCM(脉冲编码调制)②Vorbis(OggVorbis压缩)③ADPCM(自适应差分脉冲编码调制)。图9-2音频剪辑导入设置9.1.2音频系统3.音频组件现实生活中,人们听到的声音是由物体发出来的。声音被感知的方式取决于许多因素。倾听者可以粗略地分辨出声音来自哪个方向,根据音量和音色判断距离。由于多普勒效应,快速移动的声源(如坠落的炸弹或过往的警车)会随着移动而改变音高。此外,周围环境也会影响声音的反射方式,因此洞穴内的声音会产生回声,但相同的声音在露天环境中却不会产生回声。为了模拟位置的影响,Unity要求声音源来自附加到对象的“音频源”。然后,发出的声音由附加到另一个对象(通常是主摄像机)上的“音频监听器”拾取。Unity然后可以模拟音频源与监听器物体之间的距离和位置的影响,并相应地播放给用户。此外还使用音频源对象和监听器对象的相对速度来模拟多普勒效应以增加真实感。9.1.2音频系统音频剪辑需要配合Unity的两个组件AudioListener和AudioSource来实现音频的播放和接收。为何需要2个组件呢,原因是将声音的发出者和接收者分离,可以很好的模拟3D音效。图9-3音频剪辑、音频源、音频监听三者之间的关系9.1.2音频系统(1)音频监听(AudioListener)音频监听组件是用于接收声音的组件,音频监听组件配合音频源为游戏创建了听觉体验。该组件的功能类似于麦克风,当音频监听组件挂载到游戏对象上,任何音频源,只要足够接近音频监听组件挂载的游戏对象,都会被获取并输出到计算机等设备的扬声器中输出播放。如果音频源是3D音效,监听器将模拟在3D世界声音的位置、速度和方向。该组件默认添加在主摄像机(MainCamera)上,如果场景中需要切换不同的摄像机,那么可以在每个摄像机上添加一个AudioListener组件,但其中只能有一个监听器起作用,所以没有激活的摄像机需要将AudioListener组件关掉。AudioListener组件没有任何属性,只是标注了该游戏对象具有接收音频的作用,同时用于定位当前的接收位置。添加AudioListener组件的方法为,选择Component|Audio|AudioListener菜单。图9-4AudioListener组件9.1.2音频系统(2)音频源(AudioSource)音频源组件用于在场景中播放音频剪辑文件,通常挂载在游戏对象上。该组件负责控制音频的播放,通过组件的属性控制音频的播放方式,比如是否循环、音量、音调、以2D或3D或空间混合模式播放、多普勒效应等。如果监听器位于一个或多个混响区内,则会将混响应用于音频源。可对每个音频源应用单独的滤波器,以获得更丰富的音频体验。Unity支持立体声到7.1的扬声器系统。如果音频文件是3D音效,音频源也是一个定位工具,可以根据音频监听对象的位置控制音频的衰减,可通过衰减曲线控制传播距离。图9-5AudioSource组件图9-6AudioSource组件的3D音效设置9.1.2音频系统AudioListener组件的各属性功能如表9-1所示。属性功能AudioClip要播放的声音剪辑文件。Output默认情况下,音频剪辑将直接输出到场景中的音频监听器(AudioListener)。使用此属性可以更改为将剪辑输出到混音器(AudioMixer)。Mute如果启用此选项,则为静音。BypassEffects启用/停用可快速绕过应用于音频源的滤波器效果的快捷方式。BypassListenerEffects启用/停用所有监听器的快捷方式。BypassReverbZones打开/关闭所有混响区的快捷方式。PlayOnAwake如果启用此选项,声音将在场景启动时开始播放。如果禁用此选项,场景启动时不播放音频剪辑,需要通过脚本使用
Play()
命令播放。Loop启用此选项可在音频剪辑结束后循环播放。Priority设置音频源的优先级。(Priority值为0表示优先级最高。值为256,表示优先级最低。默认值为128)。对于音轨值应设置为0,避免被意外擦除。Volume设置声音的大小。Pitch由于音频剪辑的减速/加速导致的音调变化量。值1表示正常播放速度。StereoPan设置立体声位置,中间为立体声,两端只播放左声道或右声道单声道声音。SpatialBlend设置3D引擎对音频源的影响程度,最左端为2D声音,最右端为3D声音。ReverbZoneMix设置路由到混响区的输出信号量。该量是线性的,范围在0到1之间,但允许在1到1.1范围内进行10dB放大,这对于实现近场和远距离声音的效果很有用。表9-1AudioListener组件的各属性功能9.1.2音频系统添加AudioSource组件的方法为,选择Component|Audio|AudioSource菜单,或者在Inspector面板通过“AddComponent”按钮添加。如果启用场景视图照明工具栏上的“音频”按钮。可以在场景视图中预览音频的播放效果及AudioSource组件中参数的调节效果。图9-7场景视图工具栏音频开关9.1.3音频设置音频设置是在宏观上对场景中的音频进行设置,打开方法:Edit|ProjectSettings|Audio。在实际开发过程中,可以对其中的参数进行修改设置。图9-8ProjectSettings中的音频设置9.1.4程序控制音频通过脚本可以控制音频源播放不同的音频剪辑文件,修改播放音量、暂停、停止播放、循环等。保存音频剪辑的类是AudioClip,继承自Object类,播放音频的组件为AudioSource类。通过GameObject对象的GetComponent<AudioSource>()方法获取音频源,从而实现对音频剪辑的控制。9.1.4程序控制音频(1)播放AudioGameObj.GetComponent<AudioSource>().Play();(2)停止AudioGameObj.GetComponent<AudioSource>().Stop();(3)添加音频文件AudioGameObj.GetComponent<AudioSource>().clip=audioclip01;(4)调整音频播放音量publicMouseWheelSensitivity=0.1;AudioGameObj.GetComponent<AudioSource>().volume-=Input.GetAxis(“MouseScrollWheel”)*MouseWheelSensitivity;9.1.4程序控制音频【例9-1】木屋场景添加背景音乐9.1.4程序控制音频【例9-2】木屋场景添加开关门动画特效音9.2灯光Unity中可以实现适合各种艺术风格的逼真光照效果,光照的工作方式类似于光在现实世界中的照明情况。Unity使用光线工作模型来获得逼真光照结果,并使用各种灯光简化模型来获得更具风格化和真实的光照效果。9.2.1灯光概述灯光是模拟真实灯光的对象,如建筑内部各种灯具、舞台和电影工作时使用的灯光设备和太阳光本身。在Unity中灯光是一种特殊对象,是提供照明的光源,它不被渲染显示,但提供了照明光线的强度、方向和颜色等,从而影响周围物体表面的光泽、色彩和亮度,通常与材质、环境共同作用,增强了场景的清晰度、真实感、层次性。不同种类的灯光对象有不同的投射方法,模拟真实世界中不同种类的光源。9.2.2灯光分类Unity提供了四种基本灯光类型:平行光(DirectionalLight)点光源(PointLight)聚光灯(SpotLight)面光源(AreaLight)9.2.2灯光分类(1)平行光平行光是由光源发射出相互平行的光,使用平行光可以把整个场景都照亮,可以认为平行光是整个场景的主光源,一般用于模拟太阳光或月光等户外自然光线。当新建一个Basic(Built-in)场景,Unity会自动创建一个平行光。(2)点光源点光源的光线由光源中心向周围360°发射,照射区域范围为一个球体。通常用来模拟灯泡或其他局部光源,还可以用点光源逼真地模拟火花或爆炸照亮周围环境。图9-14平行光对象及其灯光组件图9-15点光源对象及其灯光组件9.2.2灯光分类(3)聚光灯聚光灯的光线投射区范围是一个圆锥体,向一个方向发射。聚光灯可以用来模拟舞台聚光灯、手电筒、汽车前照灯和探照灯等光源的灯光。通过脚本或动画控制投射方向,移动的聚光灯可以照亮场景的一小块区域并产生舞台风格的光照效果。
(4)面光源面光源可以通过两种形状来定义区域光,矩形或圆盘。区域光从该形状的一侧发出光。发出的光在该形状的表面区域的各个方向上均匀地传播。区域光提供的光照强度以距光源距离的平方反比确定的速率衰减,遵循平方反比定律。区域光照明通常用于产生真实的全局光照明效果,要同时考虑直接照明和间接照明,非常消耗处理器计算资源,因此区域光在运行时不可用,而是烘焙到光照贴图中。小的面光源可以模拟较小的光源(例如室内光照),但效果比点光源更逼真。图9-16聚光灯对象及其灯光组件图9-17面光源对象及其灯光组件9.2.3创建灯光1.创建灯光在Unity中可以像创建3D对象一样创建灯光对象,创建方法,选择菜单GameObject|Light|PointLight,或者在Hierarchy面板中选择右键菜单Light|PointLight,并将灯光对象放置在场景中合适的位置。如果启用场景视图照明工具栏上的“灯泡”开关按钮。可以在场景视图中预览移动灯光对象的照明效果,及观察设置灯光参数时对应的照明效果。
图9-18场景视图工具栏灯光开关9.2.3创建灯光2.灯光参数灯光的主要属性参数有类型、颜色、亮度、阴影、投射范围、光斑等。Type:灯光类型,可以选择前面讲过的Spot、Directional、Point、Area四种灯光类型,Color:灯光颜色,可以从拾色器中设置灯光的颜色,默认颜色为白色。Mode:灯光模式,光源的Mode属性用于定义光源的目标用途,有三个选项Baked、Realtime和Mixed,如图9-20所示。三个选项含义如下:①Baked:运行之前预先计算烘焙(Baked)光源产生的光照,不会将这些光源包括在任何运行时光照计算中;②Realtime:运行时每帧计算并更新实时(Realtime)光源的光照,不会为实时光源进行任何预先计算;③Mixed:运行前为混合(Mixed)光源预先执行一些计算,另一些计算则会在运行时执行。Intensity:灯光亮度,设置灯光的亮度。Range:灯光范围,设置灯光的照射范围,适用于点光源、聚光灯和面光源。ShadowType:阴影类型,有NoShadow、HardShadow、SoftShadow三个选项,如图9-21所示。添加点光源、聚光灯时,默认为NoShadow不投射阴影。添加平行光后,会自动打开软阴影(SoftShadows),近处的阴影显示没有问题,但远处的阴影未显示出来,当视角移近以后,阴影才会显示出来。这是因为光线阴影渲染会占用很多资源,所以为了提高实时渲染效率,采取了阴影剔除优化算法。阴影剔除的距离可以通过质量(Quality)设置面板来设置修改,通过菜单Edit|ProjectSettings|Quality打开质量设置对话框,如图9-22所示,默认的阴影剔除的距离ShadowDistance为150米。9.2.3创建灯光3.镜头光斑(LenFlare)镜头光斑产生原理为,光线通过两种介质的交界处时,会产生反射和折射现象,而空气和玻璃是两种不用的介质,所以当太阳光穿过摄像机镜头时,从某个角度的反射和折射就可能形成耀斑,这种现象常见于镜头正面逆光或大角度侧光的时候。Unity早期版本内置Flare资源,通过导入LightFlares.unityPackage包,可以导入Unity内置的三个Flare资源。较新版本Unity,可以到AssetsStore下载相关资源包使用。
图9-23镜头光斑
图9-24Unity早期版本内置的三个Flare资源9.2.4程序控制灯光1.创建灯光对象可以直接定义创建灯光对象,也可以定义一般游戏对象后,为其添加Light组件。publicGameObjectlightobj; lightobj=newGameObject("light"); lightobj.AddComponent<Light>();9.2.4程序控制灯光2.修改灯光对象属性(1)对于通过Light定义的灯光对象,直接修改该对象的灯光属性。publicLightplightobj;lightobj.Type=LightType.spot;lightobj.Range=4.0f;(2)对于通过新建一个GameObject对象,通过添加Light组件创建的灯光对象,需要通过GetComponent<Light>()方法,获取到灯光组件来修改对应的灯光属性。publicGameObjectlightobj;…… //创建代码lightobj.GetComponent<Light>().color=Color.red;lightobj.GetComponent<Light>().intensity=4.0f;9.2.4程序控制灯光【例9-3】木屋场景添加灯光9.3材质与贴图材质与贴图是计算机图形学中的重要概念,它们通常在3D建模和渲染过程中使用,用于定义和描述物体表面的外观属性。材质是一个数据集,它为渲染器提供了必要的数据和光照算法,以决定一个表面如何渲染。贴图是将二维图像(纹理Texture)通过UV坐标映射到三维物体表面上的过程。贴图不仅包括纹理本身,还包括了如UV坐标、颜色、反光度等多种属性。9.3.1材质1.材质概述现实世界是五光十色的,每种物体都有颜色,分为单一颜色(纯色)和混合颜色。材质是指定给对象的面以在渲染时按某种方式出现的数据信息,主要用于描述对象如何反射和传播光线,为对象表面加入色彩、光泽、纹理和不透明度等,它包含基本材质属性和贴图。物体通过材质表现出独特的外观特色:光滑/粗糙、光泽/暗淡、自发光、反射/折射、半透明/透明等。物体材质的最终渲染效果与以下因素有关,对象的材质特性,光源(灯光的亮度、颜色等),环境(反射、光线追踪材质对环境的反射,透明材质的反射、折射等),所使用的渲染器等。9.3.1材质2.创建材质Unity中材质是一种资源,可以在Assets面板中新建并编辑材质,或者从外部导入已经创建好的材质。创建材质的方法有以下两种:①主菜单Assets|Create|Material;②Assets面板的右键菜单Create|Material。材质资源的扩展名为.mat,材质创建好后,可以编辑材质,设置材质的颜色贴图及其他属性等。然后将材质赋给对象,为对象赋材质的方法有,直接将材质拖动到场景的对象上,或拖到Hierarchy面板的对象名称上,或拖到该对象的Inspector面板下方空白处。9.3.1材质3.材质类型在Unity中材质与着色器(Shader)之间有着密切的关系,同时使用材质和着色器来定义场景和对象的外观。着色器包含着定义了属性和资源使用种类的代码,材质包含对Shader对象的引用。如果Shader对象定义材质属性,则材质还可以包含数据(如颜色或纹理等)。材质可以调整属性和分配资源。用户可以选择用于任何特殊材质的着色器,只需在检视面板中展开Shader下拉列表,选择需要的着色器。着色器决定了材质的特性和可用的属性,这些属性可以是颜色、滑块、纹理、数字或向量等。在场景中如果已经将材质应用到一个活动对象,会实时看到属性的更改应用到对象。图9-28材质的着色器下拉列表9.3.2着色器1.着色器概述着色器程序,通常称为着色器,是在GPU上运行的程序。在Unity中,着色器分为三大类,每个类别的用途不同,使用方式也不同。①作为图形管线一部分的着色器:是最常见的着色器类型,其执行一些计算来确定屏幕上像素的颜色,在Unity中,通常是通过Shader对象使用这种类型的着色器。②计算着色器:在常规图形管线之外,在GPU上执行计算。③光线追踪着色器:执行与光线追踪相关的计算。在Unity中,当使用的着色器属于图形管线的一部分,会用到Shader类的实例,Shader类的实例称为Shader对象。Shader对象是Unity使用着色器程序的特定方式,它是着色器程序和其他信息的封装器,包含着色器程序、更改渲染状态的GPU上设置指令,以及如何使用它们的信息。允许在同一个项目中定义多个着色器程序。9.3.2着色器2.渲染管线目前图形渲染都是按照一定的运行流程来进行的,这种运行流程称为渲染管线。图形数据从管线的一端输入,经过各个图形处理模块的处理,最终在管线末端输出,并把需要显示的内容输出到显示器上。它就像一个加工工厂的流水线,原料(图形顶点等数据)被送往车间的流水线上,经过一定的加工流程(图形处理模块),直到生产出需要的产品(显示器上显示的效果)。了解渲染管线的流程,是编写着色器的基础。渲染流程一般采用硬件加速,在GPU层级,可以继续对该流程细化。渲染管线可以分为固定渲染管线和可编程渲染管线两种。固定渲染管线,旧式的渲染管线是一种固定渲染管线,这种渲染管线的功能是固定的,只能通过调用它的接口来实现特定的功能,由于灵活度不高,所以很多预想的效果都不能实现。可编程渲染管线,随着技术的发展,传统的固定渲染管线已经被可编程渲染管线取代。用于控制渲染管线的技术称为可编程着色器技术,该技术使用着色语言实现渲染的操作。由于这种可编程性,使得开发人员可以更灵活方便的根据需要自定义自己的渲染效果而不再受固定渲染管线的限制,从而实现了更多的渲染效果。可编程渲染管线可以对“顶点处理器”和“片元处理器”进行编程来自定义自己的效果,这两个部分的程序分别被称为“顶点着色器”和“片元着色器”。9.3.2着色器3.着色器语言Unity内置的材质都是由着色器语言(ShaderLanguage)编写实现的。Unity提供了已经封装着色器功能的API来方便用户编写着色器,同时支持Direct3D的HLSL着色语言、OpenGL的GLSL着色语言和CG语言。Direct3D的HLSL(HighLevelShaderLanguage,高级着色器语言)是由微软开发的一种类似于C语言语法的着色器语言,它只能运用于Windows操作系统平台上,只能供Direct3D使用。OpenGL的GLSL(OpenGLShadingLanguage,OpenGL着色语言)也称为GLslang,它是由OpenGL组织建立的一种以C语言为基础的高阶着色语言,由于OpenGL的跨平台性,使得该语言能够运行于各种操作系统平台上,包括Windows平台、Mac平台、Linux平台、iOS平台和Andriod平台等。对于移动设备应用的开发,一般采用OpenGL的子集OpenES中的GLSL开发。CG语言(ComputerGraphicLanguage),是由Nvidia公司开发的针对GPU编程的高级着色器语言,CG极力保留了C语言的大部分语义,并使开发者从硬件细节中解脱出来。ShaderLab语言,是Unity专门用于组织着色器代码的一种语言,除了ShaderLab提供的功能外,还可以调用CG或HLSL的着色器代码。使用ShaderLab要比使用CG或HLSL更为简单。但要注意,表面着色器、顶点和片元着色器是用CG或HLSL语言编写的,而固定功能着色器则是完全使用ShaderLab着色语言编写的。9.3.2着色器4.Legacy内置着色器在引入基于物理的标准着色器之前,Unity提供了80多种内置着色器,每种着色器都有不同的用途。这些着色器仍然包含在Unity中,用于实现向后兼容。建议在新项目中使用基于物理的标准着色器。早期Unity版本的每个标准安装包都有一个内置着色器的库。
图9-29Unity内置着色器LegacyShaders图9-30Unity内置着色器库9.3.2着色器5.基于物理的标准着色器Unity标准着色器是一个包含一整套功能的内置着色器,用于渲染真实世界的对象,如石头、木头、玻璃、塑料和金属,并支持各种着色器类型和组合。只需在材质编辑器中使用或不使用各种纹理属性和参数即可启用或禁用此着色器的功能。标准着色器还包含一种称为基于物理着色(PhysicallyBasedShading)的高级光照模型。基于物理着色(PBS)以一种模仿现实的方式模拟材质和光照之间的相互作用。PBS应用于实时图形渲染,在光照和材质需要以直观而逼真的状态共存的情况下,这种光照模型的效果最佳。基于物理着色是为了创建一种用户友好的方法,使场景在不同光照条件下实现一致、合理的外观。PBS模拟了光在现实中的表现,而不使用可能有效或无效的多个临时模型。它遵循物理学原理,包括能量守恒(对象反射的光绝不会多于接受的光)、菲涅耳反射(所有表面在掠射角处具有更高的反射率)以及表面如何遮挡自身等等。标准着色器在设计时就考虑了硬表面,能够处理大多数现实世界的材质,如石头、玻璃、陶瓷、黄铜、银或橡胶等,甚至对于皮肤、头发和布料等非硬质材质也表现得很不错。通过标准着色器,可将大量着色器类型(例如漫射、镜面反射、凹凸镜面反射、反射)组合到同一个可处理所有材质类型的着色器中。这样做的好处是,在场景的所有区域都使用相同的光照计算,从而在使用该着色器的所有模型中提供逼真、一致且可信的光照和着色分布。标准着色器光照数学实现方案,对漫反射组件使用Disney模型,对镜面反射使用GGX模型,并采用Smith联合GGX和Schlick菲涅耳近似法。9.3.2着色器6.自定义着色器用户可以使用Unity提供的各种内置着色器,也可以自己创建新的着色器。可以通过两种方式创建着色器Shader对象,分别具有各自类型的资源:①编写代码来创建一个着色器资源,这是一个带有.shader扩展名的文本文件;②使用ShaderGraph创建一个ShaderGraph资源。ShaderGraph是一个工具,能够直观地构建着色器,可以在图形框架中创建并连接节点,而不必手写代码,ShaderGraph提供了所作更改的即时反馈,对于不熟悉着色器创建的用户来说非常简单。无论使用哪种方式创建Shader对象,Unity在内部都以相同的方式表示该Shader对象。Shader对象可以嵌套,其信息按照子着色器和通道的结构进行组织。9.3.3贴图
1.贴图概念贴图是指定给材质的图像。可以将贴图指定给构成材质的大多数属性,可以影响对象的颜色、纹理、不透明度以及表面质感等。根据指定给材质属性的不同,贴图可以分为纹理贴图、法线贴图、反射贴图、凹凸贴图、不透明贴图、立方体贴图等。9.3.3贴图
2.纹理概念通常情况下,对象的网格几何形状仅给出粗略的外形轮廓,大多数细节由纹理提供。纹理就是应用于网格表面上的标准位图图像,可以在Photoshop等软件中创建纹理,然后将其导入Unity。Unity纹理支持的图像格式有BMP、EXR、GIF、HDR、IFF、JPG、PICT、PNG、PSD、TGA、TIFF等。在3D项目中,图像导入到Assets文件夹中默认为纹理。在2D项目中,图像导入到Assets文件夹中默认为精灵。只要图像满足指定大小要求,Unity便可以导入并优化图像,Unity也可以导入多层PhotoshopPSD或TIFF文件,导入后这些文件会自动展平,这样就不会在游戏中造成大小损失,这种展平操作不影响原始的PSD或TIFF文件。图像导入Unity中,称为纹理,纹理指定给材质的属性,该纹理就称为贴图。9.3.3贴图
3.将纹理指定给材质的某个属性有两种方法可以将一个纹理应用到一个材质的属性。①将纹理从资源面板中拖动到方形纹理贴图上面;②单击Select(选择)按钮,然后从出现的对话框中选择纹理。图9-31选择纹理贴图按钮9.3.3贴图
4.纹理类型图像导入Unity中后,根据用途的不同,可以创建为不同类型。使用TextureType属性可选择要从源图像文件创建的纹理类型,TextureImportSettings窗口中的其他属性将根据此处设置的纹理类型而变化。在不同的应用场景,需要将导入Unity中的图像设置为不同的纹理类型,以实现正确的图像应用。其中,Default、Normalmap等常用于材质的属性。Default:默认的纹理类型,普通图像,可以应用在多种场合。Normalmap:法线贴图。EditorGUIandLegacyGUI:GUI编辑器用到的UI贴图。Sprite(2DandUI):图像精灵,主要用于2D游戏中,把一张大的图分割成一张张小图,大的图叫图集Atlas,小的图叫精灵Sprite,可以通过精灵名字来使用精灵。Cursor:鼠标(光标)贴图,在ProjectSettings的Player设置中,将DefaultCursor设置为Cursor类型的纹理,可以将游戏项目的鼠标光标显示样式设置为该Cursor纹理的图像显示样子。Cookie:对纹理资源进行格式化,适合在内置渲染管道中用作轻量cookie。Lightmap:光照贴图或者叫烘焙贴图,通过烘培贴图,可以节省计算资源,提高游戏运行效率。DirectionalLightmap:直接光照贴图。Shadowmask:阴影遮罩贴图,可以更低的性能成本提供更低保真度的阴影。SingleChannel:单通道贴图,适用于单通道灰度贴图应用场景。图9-32纹理类型9.3.3贴图
5.精灵精灵是一种可以在Unity项目中使用的2D资源,但它也可以在3D场景中使用,精灵与标准纹理类似,可以通过一些技术管理精灵纹理,以提高开发效率。3D项目中将导入的图像的TextureType设置为Sprite,该图像就转换为精灵纹理,此时在Project面板中观察,该精灵图像的图标前面会出现一个三角,展开后显示一个子对象。精灵与非精灵纹理的不同是,Project面板中的精灵纹理能直接用鼠标拖入场景视图或层级面板中成为一个精灵游戏对象,而非精灵纹理不能作为一个对象添加到场景中。如果开发的是2D项目或者希望导入的图片默认是Sprite精灵类型的,可以通过菜单Edit|ProjectSettings…|Editor,将“DefaultBehaviourMode”的Mode选项值设置为“2D”。
图9-33将“DefaultBehaviourMode”的Mode设置为“2D”9.3.4程序控制材质与贴图可以在编辑器中,编辑材质、更换材质纹理贴图和UI组件属性的精灵贴图,也可以在C#脚本中动态加载材质纹理贴图及精灵贴图。C#脚本中,Material类表示材质,Texture类是纹理,Sprite类是精灵。1.2D图像对象Image动态加载精灵贴图Imageimg;Spriteimg_sprite;img=GameObject.Find("Image").GetComponent<Image>();img.Sprite=img_sprite;2.动态加载材质纹理贴图Materialchargemeter_mat;Texturechargemeter_mat_texture;chargemeter_mat=GameObject.Find("chargeMeter").GetComponent<Renderer>().material;chargemeter_mat.mainTexture=chargemeter_mat_texture;9.3.3贴图
【例9-4】能量源动态显示精灵贴图9.3.3贴图
【例9-5】能量柜动态显示材质中贴图9.4摄像机9.4.1摄像机概述正如电影及动画中使用摄像机向观众展示故事一样,Unit
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仁爱版八年级英语上册Unit1 Playing Sports课时2 Function:表达偏好与计划教学设计
- 核心素养导向的九年级上学期英语Unit 6阅读语篇深度分析与语言能力建构教学设计
- 基于眼动追踪的视觉行为分析实验教学设计-以硕士研究生教育技术学专业为例
- 2026历史常识面试题目及答案
- 2026模型部署面试题及答案
- 2026区域服务商面试题及答案
- 医院医保内部控制制度
- 医院卫生管理制度
- 寻亲服务突出问题专项整治工作汇报
- 2026年汽车站中转检票员岗位试题(附答案)
- 2026年厂区消防应急器材使用试题库及答案
- 2026年安徽商企文化旅游投资有限公司公开招聘工作人员2名笔试模拟试题及答案详解
- 2026年哈尔滨市南岗区六年级下学期数学期末试题及答案0707
- 2026-2030中国剩余电流装置行业市场发展趋势与前景展望战略研究报告
- 2026年核能质保监查员考试题及答案
- 中医护理在消化系统疾病患者中的应用
- 护理员培训:协助如厕与清洁
- (正式版)JBT 3300-2024 平衡重式叉车 整机试验方法
- 锂电池行业MES应用解决方案
- 国家安全生产考试证书
- 钢筋挂篮计算书
评论
0/150
提交评论