版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
光影效果的使用
第1页
7.1光源在Unity游戏开发引擎中内置了四种形式的光源,分别为点光源、定向光源、聚光灯光源和区域光源
7.1.1点光源和定向光源点光源是从一个点的位置向四面八方发射光线,类似于蜡烛、灯泡,是场景搭建的常用光源之一。在合适的位置添加光源会大大增强游戏对象的层次感,使场景中的游戏对象更具有真实的效果。而定向光源能够更好的模拟太阳,定向光源发出的光线都是平行的,并从无限远处投射光线到场景中,很适用于户外的照明。第2页
7.1光源1.点光源基础知识点光源的添加可以通过点击菜单栏中“GameObject”→“Light”→“PointLight”菜单完成选中场景中的点光源,在其Inspector面板中就会出现点光源的设置面板,在设置面板中可以修改点光源的位置,光照强度、光照范围等等参数。参数名含义参数名含义Type光源类型,可以在四种形式的光源之间进行切换DrawHalo是否启用光晕Range光源的光照范围Color光照颜色Intensity光照强度BounceIntensity用来设置光的反射强度ShadowType设置阴影模式(没有阴影、硬阴影、软阴影)Flare设置光照耀斑、镜头光晕效果Strength阴影强度,值越大,阴影的颜色越浓Resolution设置阴影的质量第3页
7.1光源1.点光源基础知识第4页Baking光源烘焙模式(实时、烘焙、混合),烘焙模式下烘焙光照后会将该光源的效果添加到烘焙贴图中,烘焙模式下的光源无法影响非静态对象,混合模式下的光源即可以被烘焙,也能够影响到非静态对象Cookie灯光遮罩,为光源设置带有alpha通道的纹理贴图,使其在不同的位置具有不同的亮度(点光源需要放置立方图纹理Cubemap)RenderMode设置光照的渲染模式,Auto模式为自动调节模式,Important模式是将像素逐个渲染,NotImportant模式是总以最快的方式进行渲染CullingMask剔除遮罩,只有其中被选中的层所关联的对象能够受到光照的影响Directional
将光源改为平行光光源,将其放在无穷远处也可以影响着场景中的物体
Spot将光源改为聚光灯光源,光线按照聚光灯定义的角度和范围在一个圆锥区内发射光线,影响才所有在该圆锥区域内的物体
NotImport灯光总是以最快的速度渲染Auto自动渲染模式,根据附近的灯光亮度和当前设置质量在运行时间时确定
7.1光源2.定向光源基础知识定向光源的添加可以通过点击菜单栏中“GameObject”→“Light”→“DirectionalLight”菜单完成,定向光源在场景中如果位置发生改变,它的光照效果并不会发生任何改变,可以把它放到场景中任意的地方,如果旋转定向光源,那么它产生的光线照射方向会随之发生变化。选中场景中的定向光源,在其Inspector面板中就会出现定向光源的设置面板。在设置面板中可以修改定向光源的位置、光照强度、光的颜色等参数。其内部参数和PointLight上的Light组件基本相同,注意定向光光源在Forword渲染路径下就可以支持实时动态阴影。
第5页
7.1光源7.1.2聚光灯光源和区域光源
聚光灯光源的照明范围为一个椎体,类似于聚光灯发射出来的光线,并不会像点光源一样向四周发射光线。区域光源是创建一片能够发光的矩形区域,只有在光照烘焙完成后才能看到效果。第6页
7.1光源1.聚光灯光源基础知识聚光灯光源的添加可以通过点击菜单栏中“GameObject”→“Light”→“SpotLight”菜单完成
选中场景中的聚光灯光源,在其Inspector面板中就会出现聚光灯光源的设置面板。在设置面板中可以修改聚光灯光源的位置,光照强度、光的颜色等参数,设置面板中参数的和PointLight上的Light参数相同,仅仅多了SpotAngle参数(用于灯光的角度调节)。
第7页
7.1光源2.区域光光源基础知识区域光光源的添加可以通过点击菜单栏中“GameObject”→“Light”→“SpotLight”菜单完成,
区域光光源只能在光照烘焙完成后才能显示出效果,一般情况区域光光源用来模拟灯管的照明效果。区域光光源无法实现Cookie效果,其余参数与其他光源完全相同。第8页
7.2光照贴图的烘焙和使用光照烘焙就是将场景中的光照信息渲染成贴图,然后将烘焙完成后生成的贴图再应用到场景中的技术,此时光照信息已经存储在纹理贴图中,不再需要CPU进行计算,能大幅度提高性能。7.2.1光照设置点击菜单栏中“Window”→“Light”即可打开Light窗口,Light窗口中分三个板块来控制Unity游戏开发引擎中跟光照相关的参数第9页
7.2光照贴图的烘焙和使用1.Object板块Object板块主要是对Hierarchy面板中的对象进行筛选,在Object面板中有四个按钮分别为全部对象、光源、渲染器、地形,当选中一个按钮时,Hierarchy面板中就会仅显示与当前选择的按钮相匹配的对象。当选择Hierarchy面板中的对象时,在Object面板中就会显示该对象与光照相关的参数控制列表。(1)Renderers——渲染器渲染器相关参数含义第10页
7.2光照贴图的烘焙和使用参数名含义参数名含义PreserveUVs保护光照图UV,若模型没有在3DMax等建模软件中展好UV,则这里必须勾选。AutoUVMaxDistance手动设置UV的最大距离ImportantGI让自发光的物体照射范围更加大(在较大的场景中可能会用到)AutoUVMaxAngle手动设置UV的最大角度AdvancedParameters设置光照图的质量Lightmapstatic该选项表示选中的游戏对象是否为Static或LightmapStatic的,如果是,则该游戏对象应该参与到GI系统中计算光照ScaleInLightmap该值影响了用于选中对象的lightmap的像素数目。1.0为默认值,表示每个对象所占光照图像素的比率。可以通过此值来优化光照图,减少不重要的对象的比例让重要的物体占更多的光照图像素来优化场景第11页
7.2光照贴图的烘焙和使用1.Object板块(2)Terrain——地形图7-19地形参数设置第12页
7.2光照贴图的烘焙和使用2.Scene板块(1)EnvironmentLighing——环境光照环境光照相关参数含义参数名含义Skybox场景中使用的天空盒Sun太阳光,可以为其指定一个定向光光源(DirectionalLight)AmbientSource环境光来源,在这里可以指定环境光是来源于天空盒、梯度还是指定颜色AmbientIntensity环境光的强度AmbientGI指定环境光的光照模式是实时光照还是烘焙,若下面的两种GI模式没有都开启,该选项的调节是没有效果的ReflectionSource反射源,可以指定反射源是天空盒或者一个自定的立方体纹理图ReflectionIntensity反射强度,设定来自天空盒或者立方图纹理的反射强度ReflectionBounce反射计算次数第13页
7.2光照贴图的烘焙和使用2.Scene板块(2)Precomputed
RealtimeGI——预计算实时全局光照预计算实时全局光照并不是用于光照烘焙,预先计算的实时全局光照系统能帮我们实时运算复杂的场景光源互动,透过这种方法,就能建立在昏暗的环境下带有丰富的全局光照反射,并实时反映光源的改变。这对于硬件的要求是目前移动端所无法达到的。(3)BakeGI——烘焙全局光照如果开发过程中需要使用光照烘焙,那么就需要将该面板选中并取消Precomputed
RealtimeGI面板的勾选,全部勾选会造成大量的重复计算不利于提升性能。第14页
7.2光照贴图的烘焙和使用2.Scene板块参数名功能BakedResolution烘焙分辨率,若该值为10就代表每个单位中分布着10个纹理元素BakedPadding在LightMap中不同物体的烘焙贴图的间距Compressed是否压缩光照图,在移动设备上最好勾选上AmbientOcclusion烘培光照图时产生一定数量的环境阻光。环境阻光计算物体每一点被一定距离内的其他物体或者一定距离内自身物体的遮挡程度(用来模拟物体表面环境光及阴影覆盖的比例,达到全局光照的效果)FinalGather控制从最终聚集点发射出的光线数量,较高的数值可以得到更好的效果第15页
7.2光照贴图的烘焙和使用2.Scene板块(4)GeneralGI——全局光照的基本设置GeneralGI面板中对全局光照的设置参数能够同时适用于Precomputed
RealtimeGI和BakedGI参数名功能DirectionalMode定向模式,默认为定向,能够满足大部分的开发需求,当游戏中需要提升直接光和间接光对静态物体的照射效果,那么就需要将其设置为DirectionalSpecular(定向镜面模式)。IndirectIntensity用于调整静态物体的自发光对其他物体的影响,以及Ambientlighting的强度.BounceBoost用于设置光线从一个物体反射到另一个物体时,被反射的光线的数量DefaultParameters用于修改关于光照的常规参数,其中有多个档次供选择,也可以进行自定义AtlasSzie用于设置光照贴图中分辨率的大小第16页
7.2光照贴图的烘焙和使用7.2.2光照烘焙案例1.案例效果图7-24案例运行效果第17页
7.2光照贴图的烘焙和使用7.2.2光照烘焙案例2.制作流程(1)首先打开Unity集成开发环境,新建一个工程并重命名为“Light_Demo”,进入工程后保存当前场景并重命名为“Bake_Demo”。然后在场景中使用Unity内置的多种简单几何体搭建一个简易的场景即可,搭建完成后效果如图7-25所示。图7-25搭建简易场景第18页
7.2光照贴图的烘焙和使用7.2.2光照烘焙案例(2)场景搭建完成后,为了使其他光源的光照效果更突出,本案例中将场景中的定向光源去掉。将所有的3D对象设置为静态对象,如图7-26所示。并在其中添加多种光源进行照明,将光源的烘焙模式均设置为Bake,如图7-27所示。最后调整光源的位置以及朝向即可。
图7-26将物体设置为静态 图7-27设置烘焙模式第19页
7.2光照贴图的烘焙和使用7.2.2光照烘焙案例(3)由于本案例仅作为演示,所以还需要对Light窗口中的部分参数进行修改,使其能够达到较好的视觉效果。首先打开Light窗口,在Scene板块中关闭预计算全局光照的功能,取消对光照烘焙贴图的压缩,并将定向模式修改为定向镜面模式,如图7-28、图7-29所示。
图7-28设置参数1 图7-29设置参数2第20页7.3反射探头Unity5.0中新增了一种制作反射效果的“ReflectionProbe”功能,该功能通过场景中若干个反射采样点来生成反射“Cubemap”,然后通过特定的着色器从“Cubemap”中采样,从而实现反射效果。7.3.1反射探头基本知识反射探头的好处是其能够捕捉所在位置各个方向的环境视图,将所捕获的图像储存为一个立方体纹理(Cubemap)。这样物体会根据其所处的探头的位置产生真实的反射效果。第21页7.3反射探头7.3.1反射探头基本知识
图7-30反射探头设置面板1 图7-31反射探头设置面板2第22页7.3反射探头7.3.1反射探头基本知识(1)反射探头类型的选择bake——烘焙:烘焙模式:这种模式类似于光照烘焙,当反射探头的位置和反射范围设定完成后,将其反射信息烘焙到Cubemap(立方图)中,这样物体上的反射效果将会固定为烘焙时的反射探头所捕捉到的环境视图。
custom——自定义:自定义模式:默认状态下Custom模式的反射探头和Baked模式的探头的用法和效果基本相同的,不同的是自定义模式下可以通过开启DynamicObjects功能,使得没有设置为ReflectionProbeStatic的动态物体也能够被反射探头捕捉。而且自定义模式下,开发人员可以为该反射探头指定Cubemap(立方图)。也就是说,当前处于A地区的反射探头捕捉的环境视图可以替换为,在B地区的反射探头所捕捉到的环境视图。第23页7.3反射探头7.3.1反射探头基本知识(2)反射探头的位置和大小探头的移动可以通过两种方式进行,一种就是通过移动反射探头在3D世界中的位置,一种是使用反射探头组件提供的移动工具,如图7-36所示
探头捕捉范围的调整也可以通过两种方式进行,一种是使用反射探头组件内置的调节按钮,如图7-36所示。点击该按钮后在包围探头的正方体的每一个面上都有一个点,如图7-35所示,可以通过拖动它们来改变捕捉范围。另一种就是修改其中的Size参数,也同样可以调节捕捉范围。第24页7.3反射探头7.3.1反射探头基本知识
图7-35范围调节点 图7-36范围、位置调节工具第25页7.3反射探头7.3.1反射探头基本知识(3)无限反射过去使用“Reflectionmapping”来制作的反射效果,但是这种方法具有局限性,它无法实现自身的反射。而反射探头是能够捕捉所在位置各个方向的环境视图,将所捕获的图像储存为一个立方体纹理(Cubemap)。这样物体会根据其所处的探头的位置产生真实的反射效果。点击菜单栏中“Window”→“Lighting”,打开Light窗口,在其“Scene”面板中“EnvironmentLighting”卷展栏下的“ReflectionBounces”属性就是用来控制反射的次数,最大为相互反射5次。第26页7.3反射探头7.3.2反射探头案例开发1.案例效果
图7-37案例运行效果1 图7-38案例运行效果2第27页7.3反射探头7.3.2反射探头案例开发2.制作流程(1)首先打开Unity集成开发环境,新建一个工程并重命名为“ReflectionProbe_Demo”,进入工程后保存当前场景并重命名为“ReflectionProbe_Demo”,然后在Assets目录下新建两个文件夹分别命名为“Texture”和“C#”,分别用来放置纹理图和脚本文件,如图7-39所示。
图7-39目录结构第28页7.3反射探头7.3.2反射探头案例开发2.制作流程(2)接下来开始搭建场景,首先将需要使用的纹理贴图导入到Texture文件夹中,然后在场景中创建Plane、Cube、Sphere、Cylinder和Capsule四中几何体,将其摆放到合适的位置并为其添加纹理贴图,完成后效果如图7-40所示。图7-40搭建场景第29页7.3反射探头7.3.2反射探头案例开发2.制作流程(3)完成后点击菜单栏中“GameObject”→“Light”→“ReflectionProbe”创建一个反射探头并将其放置在场景的中间位置,为了使反射效果更突出,将反射探头设置面板中的Cubemap分辨率设置为1024*1024,并使用实时模式,如图7-41、图7-42所示。图7-41设置反射探头模式 图7-42设置Cubemap分辨率第30页7.3反射探头7.3.2反射探头案例开发2.制作流程(4)接下来向场景中添加用于呈现反射效果的球体,在场景中新建一个球体,调节其位置和大小使其能够将反射探头包含在内,然后为其添加一张纯色的纹理贴图,案例中使用的是白色纹理。在其Inspector面板的材质编辑器中将Metallic和Smoothness均调节为1,使其反射效果更好,如图7-43所示。
图7-43调节材质编辑器 第31页7.3反射探头7.3.2反射探头案例开发2.制作流程(5)完成后应该就能够看到反射探头所产生的效果已经应用到了这个球体之上,因为在该球体的MeshRenderer(网格渲染器)中已经将当前场景中的反射探头绑定到了该球体上,如图7-44所示。接下来就需要编写脚本来控制摄像机的运动,在C#文件夹下右键→Create→C#Script创建一个C#脚本并重命名为“Demo”。双击脚本进入脚本编辑器编辑代码,具体代码如下。图7-44设置网格渲染器第32页7.3反射探头7.3.2反射探头案例开发代码usingUnityEngine;2 usingSystem.Collections;3 publicclassDemo:MonoBehaviour{4 voidUpdate(){5Camera.main.transform.RotateAround(this.transform.position,Vector3.up,0.3f);6 }}(6)脚本编写完成后保存并退出,在Unity集成开发环境中将编写好的Demo脚本绑定到球体上即可(可以通过将脚本拖拽到球体对象上来完成绑定)第33页7.4法线贴图7.4.1法线贴图的基本知识法线贴图就是在原物体凹凸表面的每个点上均作法线,通过RGB颜色通道来标记法线的方向,对于视觉效果而言,它的效率比原有的凹凸表面更高。若在特定位置上应用光源,可以让细节程度较低的表面生成高细节程度的精确光照方向和反射效果。(1)法线贴图(Normalmapping)在三维计算机图形学中,是凹凸贴图(Bumpmapping)技术的一种应用,法线贴图有时也称为“Dot3(仿立体)凹凸纹理贴图”。凹凸与纹理贴图对于现有模型的法线添加扰动的方式不同,法线贴图要完全更新法线。(2)法线贴图将具有高细节的模型通过映射烘焙出法线贴图,然后贴在低端模型的法线贴图通道上,使其表面拥有光影分布的渲染效果,能大大降低表现物体时需要的面数和计算内容。
第34页7.4法线贴图7.4.2在Unity中使用法线贴图1.案例效果
图7-47Diffuse纹理图效果 图7-48Normal纹理图效果第35页7.4法线贴图7.4.2在Unity中使用法线贴图2.开发流程(1)打开Unity游戏开发引擎,利用Ctrl+N快捷键新建一场景并保存为“NormalmapDemo”。在Assets目录下新建两个文件夹,分别重命名为“Materials”和“Texture”。将事先准备好的箱子图片以及其法线贴图导入进Texture文件夹,资源结构布局如图7-49所示。
图7-49资源结构布局
第36页7.4法线贴图7.4.2在Unity中使用法线贴图2.开发流程(2)选中NingMong_NRM法线贴图,在Inspector面板可以看到其属性参数,其中Bumpiness表示的是法线贴图的凹凸程度,可以通过滑块来调整当前的数值,点击Apply应用,如图7-50所示。在Scene中新建一个Plane,并在Plane上放置两个Cube并赋于不同贴图作比较。图7-50法线贴图参数第37页7.4法线贴图7.4.2在Unity中使用法线贴图2.开发流程(3)在Materials文件夹中右击→Create→Material菜单新建两个材质球,如图7-51所示。将其分别命名为“Diffuse”、“Normaterial”。选中Diffuse材质球,将木箱的纹理图拖拽到Albedo参数下(采用默认的着色器)。如图7-52所示。
图7-51创建材质球 图7-52添加纹理图第38页7.4法线贴图7.4.2在Unity中使用法线贴图2.开发流程(4)选中Normaterial材质球,将其着色器修改为LegacyShaders/BumppedDiffuse,并将木箱纹理图拖拽到Base中,将法线贴图拖拽到Normalmap中,如图7-53所示。将两种材质球分别赋给之前创建的两Cube。图7-53法线贴图材质球第39页7.5Unity3D光照系统中的高级功能7.5.1光照系统中的小功能1.基础知识(1)Unity中支持多种渲染路径,不同的渲染路径有不同的性能和效果,大多数都是影响光照和阴影的。点击Edit→Project→Player菜单,在Inspector面板中的OtherSetting卷展栏下RenderingPath中设置渲染路径Forward:该渲染路径也是Unity的预设渲染路径,在该渲染路径下,每个对象的着色是根据影响对象的灯光,通过“Pass”来着色。这个渲染路径的优点是快速,硬件要求低,可以快速处理透明度。然而其缺点是有大量光源的复杂场景中效率反而会降低。第40页7.5Unity3D光照系统中的高级功能7.5.1光照系统中的小功能1.基础知识Deferred:该路径为延迟渲染路径,延迟了光的遮蔽与混合信息直到第一次接收到表面的位置发现材质数据着色到一个“几何缓冲器(G-buffer)”作为一个屏幕空间的贴图。该方法的优点是照明的着色成本和像素数量成正比,而非灯光数量,所以非常适合在有大量“realtime”模式的光源存在时显示真实的光照和阴影,但是需要较高的硬件水平支持。LegacyVertexLit:顶点照明渲染路径通常在一个pass中渲染物体,所有的光源照明都是在物体的顶点上计算的。该渲染路径是最快速的并且具有最广泛的硬件支持。LegacyDefferred(lightprepass):该渲染和Defferred渲染路径非常相似,只是采用了不同的手段去实现第41页7.5Unity3D光照系统中的高级功能7.5.1光照系统中的小功能1.基础知识(2)Flare镜头光晕也成为耀斑,是模拟相机镜头内的一种光线折射的效果,常用来表示非常明亮的灯光。添加镜头光晕最简单的方法是在灯光Light组件下的Flare选项中赋于耀斑效果。(3)CullingMask光照过滤是光照系统中一个较为实用的小功能,经常会被用到。比如场景中不想让某些物体受到某个光源的影响、需要某盏灯专门为某个对象提供光照等情况就需要使用光照过滤(CullingMask),将该物体置于某一层,将灯光遮罩该层即可。第42页7.5Unity3D光照系统中的高级功能7.5.1光照系统中的小功能2.案例效果图7-59案例效果图第43页7.5Unity3D光照系统中的高级功能7.5.1光照系统中的小功能3.开发流程(1)打开Unity集成开发环境,首先导入标准资源包中的镜头光晕效果,在Assets中右击→ImportPackage→Effects,在弹出的Importingpackage面板中点击导入即可。如图7-60所示。在Assets目录下新建一个文件夹并重命名为“Texture”。
图7-60导入镜头光晕效果图
第44页7.5Unity3D光照系统中的高级功能7.5.1光照系统中的小功能3.开发流程(2)将开发过程中需要用到的立方体的纹理图拖拽到Texture文件夹中,点击GameObject→3DObject→Plane菜单,在场景中创建一个地板,如图7-61所示。重复相同步骤再次创建两个Cube,并分别重命名为“Cubeone”和“Cubetwo”,并调整这三个对象的位置,使其接近于摄像机。
图7-61创建Plane第45页7.5Unity3D光照系统中的高级功能7.5.1光照系统中的小功能3.开发流程(3)将Texture中的纹理图拖拽到Cubeone游戏对象的上,并将其着色器类型修改为Mobile/BumpedDiffuse,如图7-62所示。这时将Texture中的Material材质球拖拽到Cubetwo中即可实现纹理图的添加。如图7-63所示。
图7-62修改着色器类型 图7-63利用材质球贴图第46页7.5Unity3D光照系统中的高级功能7.5.1光照系统中的小功能3.开发流程(4)利用快捷键Ctrl+Shift+N新建一个空游戏对象,调整其位置在两个Cube的左后方。点击Component→Effects→LensFlare菜单,为其添加该组件,如图7-64所示。将标准资源包中的某个耀斑效果图拖拽到该组件的Flare参数中,效果如图7-65所示。
图7-64添加LensFlare组件 图7-65添加耀斑效果第47页7.5Unity3D光照系统中的高级功能7.5.1光照系统中的小功能3.开发流程(5)在指定耀斑参数后,可以通过调整GameObject的位置以及旋转角度来改变镜头光晕的位置和朝向,效果如图7-66所示。选中Cubeone游戏对象,在其属性面板中的右上角的Layer一栏中,点开下拉列表,选择AddLayer…菜单,如图7-67所示。
图7-66镜头光晕效果 图7-67添加层次第48页7.5Unity3D光照系统中的高级功能7.5.1光照系统中的小功能3.开发流程(6)在弹出的属性面板中,前七个是系统默认的层次无法更改。选择第八个输入“Cubeone”,如图7-68、图7-69所示。创建完成后将Cubeone游戏对象的Layer修改为Cubeone,如图7-70所示。这时层次的添加就完成了。
图7-68添加Layer1 图7-69添加Layer2第49页7.5Unity3D光照系统中的高级功能7.5.1光照系统中的小功能3.开发流程(7)修改完成后,选中场景中的DirectionalLight光源,在Light组件中修改CullingMask参数,将Cubeone层次取消勾选即可实现光照过滤的功能,如图7-71所示。利用该功能还可以实现特定的光源给特定物体进行照射的功能。
图7-70给定特定的层次 图7-71光照过滤功能第50页7.5Unity3D光照系统中的高级功能7.5.2阴影的设置1.阴影质量Unity中使用“阴影贴图(Shadowmaps)”来显示阴影Unity游戏开发引擎提供两种阴影模式(ShadowType)分别为HardShadow和SoftShadow,在相同灯光照射下以及同等的贴图分辨率,HardShdow模式下的阴影效果十分的生硬并且带有明显的抗锯齿,下面给出四种不同情况下的阴影贴图,如图7-73所示。
第51页7.5Unity3D光照系统中的高级功能7.5.2阴影的设置2.QualitySettings面板点击Edit→Project
Settings→Quality菜单,进入QualitySetting面板即可进行分辨率的设置。如图7-47、7-75所示。Shadows具体参数如表7-7所列。
图7-74打开质量设置面板 图7-75Shadows设置参数第52页7.5Unity3D光照系统中的高级功能7.5.2阴影的设置2.QualitySettings面板
表7-7阴影质量参数设置参数名含义Shadows设置阴影的类型ShadowResolution阴影的分辨率,可以将分辨率设置为:低、中、高、极高,分辨率越高,处理开销越大ShadowProjection阴影投射,平行光的投射阴影有两种方式:CloseFit渲染高分辨率阴影,但是相机移动时,阴影会稍微摆动;StableFit渲染的阴影分辨率低,但是不会在相机移动时摆动ShadowDistance相机的最大阴影可见距离,超过这个距离的阴影不会被计算ShadowCascades阴影层叠,层叠数目越高,阴影质量越好,计算开销越大第53页7.5Unity3D光照系统中的高级功能7.5.2阴影的设置
3.阴影性能Unity中降低阴影消耗的常用方法如下(1)使用光照贴图(2)分辨率和阴影模式的设置(3)设置阴影距离
第54页7.5Unity3D光照系统中的高级功能7.5.3LightProbes光探头1.基础知识LightProbes的原理是在场景中放上若干个采样点,收集采样点周围的明暗信息,然后在附近几个点围成的区域内进行差值,当动态的游戏对象位于这些区域内时会根据位置返回差值结果也就是其所受的光照结果。这种做法并不会消耗太多的性能,也能实现动态物体和静态场景光照效果的相互融合。
第55页7.5Unity3D光照系统中的高级功能7.5.3LightProbes光探头2.案例效果
图7-76未接受光探头的光影效果 图7-77接受光探头的光影效果第56页7.5Unity3D光照系统中的高级功能7.5.3LightProbes光探头3.开发流程(1)光探头存在的价值是为了解决动态物体与烘焙好的Lightingmap场景光照突兀的问题,首先搭建一个简单的场景。利用Unity中简单的几何体搭建一个场景,效果如图7-78所示。图中绿色的长方体为自发光物体。
图7-78搭建创建效果图
第57页7.5Unity3D光照系统中的高级功能7.5.3LightProbes光探头(2)在场景搭建过程中,需要给每个游戏对象添加材质。这里以自发光物体和长方体为例介绍材质球的创建过程。在Assets目录下新建一文件夹并重命名为“Materials”,在该文件夹下右击→Create→Material,并重命名为“blue”,在其Albedo参数中将颜色修改为蓝色,如图7-79所示。
图7-79修改材质球颜色第58页7.5Unity3D光照系统中的高级功能7.5.3LightProbes光探头(3)根据步骤2再次新建一名为Yingguang-green的材质球,将其着色器参数修改为LegacyShaders/Self–Illumin/Diffuse,并在MainColor参数中将颜色修改为淡绿色,将该发光材质球指定给创建的小长方体,如图7-80所示。
图7-80创建自发光材质球第59页7.5Unity3D光照系统中的高级功能7.5.3LightProbes光探头(4)至此,场景的搭建就完成了,将场景中的所有游戏对象标志为静态物体,对场景进行烘焙(具体过程已经在前面章节详细介绍过,有需要的可以参考前面讲解的知识)。利用Ctrl+Shift+N创建一个空游戏对象,点击Component→Rendering→LightProbesGroup菜单添加光探头组件,如图7-81所示。
图7-81添加LightProbesGroup组件第60页7.5Unity3D光照系统中的高级功能7.5.3LightProbes光探头(5)下面就要为游戏场景布置采样点了。点击“LightProbeGroup”组件中的“AddProbe”按钮,Scene窗口中就会出现一个新的“小球”,接下来将该小球移动到场景中的某个位置即可完成其摆放,点击“DuplicateSelected”按钮可以复制一个当前选中的采样点。(6)重复第5步操作,直到场景中大部分阴影比较凸显的地方都放置有采样点,如图7-82所示。其中很多用紫色的线连起来的黄色的“小球”就是设置的采样点,注意采样点的多少并不会影响性能。采样点放置完毕后,需要再次烘焙游戏场景,所有的采样点都赋予了其所在位置的光影信息。
图7-82采样点的设置
第61页7.5Unity3D光照系统中的高级功能7.5.3LightProbes光探头(7)接下来可以测试一下LightProbe的功能,创建一个小球并将其摆放到场景中的各个位置,观察其光影效果是否和有区别。首先将小球摆放到场景中具有发光材质的地方。开关其MeshRenderer组件中的UseLightProbes参数,如图7-83所示,并观察其区别。
图7-83是否启用LightProbes效果第62页7.5Unity3D光照系统中的高级功能7.5.3LightProbes光探头4.LightProbes应用细节(1)采样点的工作原理是将场景空间划分为多个相邻的四面体空间,为了能够合理的划分出空间以便进行正确的差值,所以需要注意不要将所有采样点放置在同一个平面上,这样会导致无法划分空间。(2)当动态物体只能在一定的高度下活动时,在其高度的上方就没有必要布置多个采样点了。当然也不能将所有的采样点布置的太低,这样就无法划分空间了。
第63页7.5Unity3D光照系统中的高级功能7.5.4Cooike
灯光中的Cookies是一个很有趣的功能。在很早的电影或戏曲中灯光特效就被用来产生一个没有真实存在的物体的印模或轮廓,比如丛林中产生的假象的树冠阴影、监狱中栏杆的阴影等,这些效果效果可以极大地提升场景的真实感。Unity也支持这种效果,就是灯光中的Cookies参数,如图7-84所示。图7-84Cookies效果7.5Unity3D光照系统中的高级功能
Cookies的使用非常简单,在平行光光源中只要把一张带有透明通道的纹理图或者灰度图拖到光源上的Cookies上即可在画面中看到效果。新导入的纹理图资源要进行设置,点击图片后在Inspector面板中勾选上AlpharomGrayscale选项即可,如图7-85所示。根据需要也可以设置其卷绕模式。此处Cookies灰度图如图7-86所示。图7-85平行光源的Cookies图7-86Cookies图片7.5Unity3D光照系统中的高级功能7.5.5CullingMask光照过滤
光照过滤是灯光系统中一个较为简单的小功能,但是经常会被用到。比如场景中不想让某些物体受到某个光源的影响、需要某盏灯专门为某个对象提供光照等情况就需要使用光照过滤(CullingMask)了。如图7-87所示,场景中的球被光照剔除掉,不管场景中的灯光如何调整也不会对其产生光照和阴影;而同样处于场景中的立方体则正常接受光照。
图7-87光照过滤示意图7.5Unity3D光照系统中的高级功能光照过滤的设置也比较简单,将不需要的光照的物体放在某个层中,然后在灯光对该层过滤光照即可。具体步骤如下。(1)首先搭建所需要的场景。依次创建一个球(Sphere)、立方体(Cube)和一个平面(Plane),将其摆放到合适的位置后创建一个平行光光源(DirectionalLight)。(2)层的创建。选中球(Sphere)游戏对象,单击其Inspect面板中的右上的Layer卷展栏会显示出当前场景中的所有层,单击最下方的AddLayer按钮,如图7-88所示,在新出现的面板中新输入一个层,如图7-89所示。创建完后将球游戏对象勾选为该层。(3)最后选中场景中的光源,在其Light组件中的CullingMask选项中取消对球坐在层Sphere层的勾选,这样场景中的球以及所有处于Sphere层的游戏对象都不会受到这个光源的影响了。7.5Unity3D光照系统中的高级功能图7-87光照过滤示意图图7-88添加层图7-89输入层的名称7.5Unity3D光照系统中的高级功能7.5.6基于物理的着色
为了表现出真实的灯光效果,基于物理的着色模仿了物理过程,包括能量储存(意味着物体反射的光源不大于它接受的光源)、Fresnel反射(视线不垂直于物体表面时,夹角越小,反射越明显),以及表面的遮蔽(来自物理学术语)等。
1.基础知识
基于物理的着色(PBS)是用模拟现实的方法呈现出材质和灯光之间的互相作用,基于用户的逼真的视觉效果。基于物理学的着色思路是給用户营造出连续性,并且看上去是在不同灯光控制下的下效果,模仿了灯光在真实情境下的行为,而不需要使用过多的专业工具。Unity中包含的Standard着色器和完整的PBS一起使用时,就可以实现很好的画面效果,真是地模拟出石头、陶瓷、黄铜及橡胶等材质,甚至模拟皮肤、头发、布料等材质。7.5Unity3D光照系统中的高级功能2.案例效果
本案例通过简单的场景介绍基于物理的着色的效果,通过添加物体的材质和位置合适的光照,即可观察到逼真的物体。打开资源包中第7章目录下的PBS_Demo\Assets\PBS_Demo.exe场景即可查看随书案例。案例效果如图7-90和图7-91所示。图7-90案例效果图图7-91案例部分细节图7.5Unity3D光照系统中的高级功能3.开发流程
通过查看上述两幅效果图,可以看出船材质逼真的效果,本案列通过使用船的材质图和合适的灯光位置创建了真实的场景画面。案例的具体开发步骤如下。(1)首先打开Unity集成开发环境,新建一个工程并重命名为“PBS_Demo”,进入工程后保存当前场景并重命名为“Demo”。然后在Project窗口中单击鼠标右键选择Create→3DObject→Plane创建一个平面,调整合适的大小,接下来选择Create→Material创建一个材质并命名为“grass”,并为平面添加材质,如图7-92所示。图
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学四年级下班主任工作计划范文
- 教师教学工作计划范文五篇
- 三年级上学期语文教学计划合集5篇
- 心理工作计划
- 2022年高中德育工作计划
- 高中数学教学工作计划模板汇编五篇
- 2022高考满分作文写酒
- 银行主任竞聘演讲稿三篇
- 下学期工作计划
- 2022国庆节创意活动方案流程策划
- 基于STM32的智能温控风扇设计
- 交易所商业计划书
- 2024年华电江苏能源有限公司招聘笔试参考题库含答案解析
- 远程银行行业背景分析
- 如何提高孩子的注意力和专注力
- 2022-2023学年海南省海口市重点中学八年级(上)期末物理试卷(含解析)
- 胆石症教案完
- 护士个人优点和缺点(六篇)
- 教师管理培训系统的设计与开发
- 2021年新高考语文Ⅰ卷真题现代文阅读《石门阵》解析
- 老化测试记录表
评论
0/150
提交评论