
1、在场景中选择添加光线。
2、选择添加阳光,调整位置和角度就可以了。Unity,又称Unity3D,是一款由UnityTechnologies研发的跨平台2D/3D游戏引擎。
Unity3D】Unity灯光效果及设置详解Unity⽀持多种技术和组件。⼀些关键部件是灯光和照明技术。在Unity中,你可以通过模拟复杂的灯光⾏为或者通过简单的灯光模型来照亮场景。
本教程将重点讲解如何在Unity 5使⽤照明⼯程,照明类型和属性,以及如何使⽤它们来创建丰富的照明效果。
预设条件
下⼀步,下载LightingIn-Starter⽂件,解压并在Unity中打开项⽬。Demo场景应该能够⾃动打开,如果不⾏,可以从Assets⽂件夹中打开。
第 1 页
定向和⾮定向光
在现实世界中,你有两种类型的照明效果:直接和间接照明。直接照明,顾名思义,是直接从光源照射的灯光(灯,太阳或其他)。另⼀⽅⾯,间接照明是来⾃另⼀物体的光。
在场景中的Action中你就可以看到直接照明,正如你能注意到的⼀样,场景中有⼀个直接光源叫做Directional Light
直接光源主要⽤于太阳以及⽉亮等户外光源,他们影响场景中所有物体的表⾯。他们也是开销最⼩的图形处理器
你可以在检视⾯板中选择Directional Light并查看其属性。你会注意到⼀些有趣的属性,⽐如类型,颜⾊以及敏感度等等。你可以改变颜⾊和旋转属性并实时查看结果。通过改变这些值,你可以直接改变你的定向光。
第 2 页
这时候,你的3D场景中没有任何的⾮定向光。你可以通过将球体移动⾄贴近红⾊或者绿⾊的墙来检查,发现球体颜⾊没有改变,说明场景中没有⾮定向光。
第 3 页
使⽤⾮定向光的⽅法之⼀就是使⽤静态对象。请记住,静态对象的使⽤可以提⾼游戏渲染的性能,但也会降低游戏质量,所以你必须在游戏中找到最佳的平衡。
在场景中添加⼀个⽅块,将它放置到球体的旁边,并命名为Cube
选中这个Cube,并在细节⾯板中启⽤静态属性
第 4 页
当启⽤静态属性时,Unity将⾃动为该对象创建⼀个光照贴图,并应⽤正确的光照模型。现在你可以将相机移动到Cube并发现⾮定向光开始起作⽤了。绿⾊或者是红⾊的光现在蔓延到了⽴⽅体上。
第 5 页
如果你改变定向光的⽅向,你会发现Unity将会⾃动更新光照贴图。
被施加到⽴⽅体上的间接照明不适⽤于球体,因为球体不是静态的。你可以通过使球体静态(检视>静态)来解决这个问题。
这个时候,你可以添加和配置定向以及⾮定向光到静态对象。然⽽,3D⼤多都是由动态对象组成。因此,我们如何将这些效果应⽤到那些动态对象呢?我们接下来将具体说明
光照探测器
当你的场景中包含⾮静态的物体,你需要使⽤特定的照明技术,正确地照亮他们,使他们看起来不像从场景中断开
第 6 页
通过使⽤光探针及其位置,可以在场景中采样点。每个光探针可以采样特定区域,然后计算该特定区域的照明。这些计算⾜够快,可⽤于游戏期
间。光探针的使⽤避免了移动物体的照明和场景中的静态光映射对象之间的连接断开
球体是⼀个动态物体,因此,与它看起来的相反,它没有被正确地照亮。如果你把定向灯关闭,你会注意到,唯⼀影响球的照明是环境光。要正确地照亮球体,你需要使⽤光探测器
要添加光探针,你需要在Component >Rendering >Light Probe Group下打开。这样会在场景中创建⼀个光探针组
第 7 页
下⼀步是将探头放在正确的位置。你现在要将他们放在盒⼦的每个⾓落
最好的办法是改变⼀个视图(单击在场景右上⾓的⽴⽅体)。然后,选择每个光探测节点并将其拖到每个框⾓
第 8 页
重复上述步骤,直到你在所有的⾓落中安装了光探头
有些场景需要额外的探针正确地照亮物体。为了添加更多的探针,您可以选择⼀个探头,然后在检视⾯板中,单击重复选定按钮。
复制之后,您需要将新节点放置在正确的位置(复制的⼀个节点将与所选的位置处于同⼀位置)
第 9 页
如果你仔细查看界⾯的督察,你会注意到,您还可以添加⾃定义探针(添加探针),删除探针(删除选定),或选择所有的探针从组(选择所有)。
在运动中观察光探头,选择球体,并为它添加⼀个刚体(添加组件>刚体)。然后,给对撞机分配⼀个材质。您可以使⽤橡胶材料。
第 10 页
现在,把球体放在盒⼦的顶部并按下播放键,现在你可以看到球体的适当光照了。要观察差异,禁⽤光照探头,并且再次播放
点光源
点光源是游戏中最常见的光源。它们通常⽤于爆炸和灯泡。因为它们在各个⽅向发光,所以它们在图形处理器上有⼀个平均成本。然⽽,计算阴影时使⽤点光源更昂贵。
第 11 页
通过选择对象>光>点光源加⼀点光源。然后,将点光源放在靠近顶部的盒⼦内。
选择点光源,并查看检视⾯板中的参数
第⼀个参数是类型。这⾥可以设置要使⽤的光类型。您可以选择点,⽅向,点,或区域。每个提供了特定的光效果。您可以选择任何选项,并看到结果的实时。然⽽,对于本教程,您将使⽤点选项。这将创建⼀个灯泡效果(光照所有⽅向相同)。
第 12 页
第⼆个参数是Baking。您可以将其设置为实时、烘焙或混合。将值作为默认值。范围参数定义光从点光源的中⼼发射多远。颜⾊参数定义发出的光的颜⾊
Intensity定义了光的亮度,并且Bounce Intensity定义了间接光强度倍数。 Shadow Type定义了阴影属性和阴影类型。你可以设置它 No Shadows, Hard Shadows,或者是Soft Shadows。记住,电光源的阴影对于引擎来说开销是最⼤的,所以要⼩⼼选择此选项。
如果选择Hard Shadows 或Soft Shadows,你会看到球体和点光源产⽣的阴影。当你改变强度值时,阴影也会减轻或加重。该分辨率允许您定义阴影的详细级别。最后, Bias 和Normal Bias让您在配置偏移时被使⽤来⽐较像素位置在光空间与阴影贴图。
第 13 页
cookie是⼀个可选的参数,它代表⼀个纹理的alpha通道,⽤来确定不同位置的光的亮度。因为这是⼀个点光源,必须使⽤⼀个⽴⽅体贴图纹理
Draw Halo选项只在光源周围呈现光晕。耀斑定义了⼀个在光的位置呈现的耀斑的引⽤。当调试3D场景和可能的瓶颈时,耀斑和Draw Halo可能是有⽤的
Render Mode定义了当渲染器渲染场景时照明是多么重要。更重要的是,渲染将更密集。渲染模式可以设置为⾃动的,重要的,或不重要的。最后,剔除遮罩⽤于选择或排除,由点光源影响的对象组。
第 14 页
聚光灯
点光源从特定区域的光源发射光。它们只照亮⼀个特定区域内的物体,⼀个由三维圆锥体分隔的区域。基本上,他们的⼯作就像汽车的前灯。你可以想象,他们是完美的⼿电筒,汽车⼤灯,或灯柱。他们在图形处理器中也是开销很⼤的。
现在让我们把点光变成聚光灯。选择您创建较早的点光源并将其类型更改为聚光灯。下⼀步,旋转的光线,以便它可以照亮地板的盒⼦。重命名为聚光灯。
第 15 页
正如你可能已经注意到的,在检视⾯板中,聚光灯的参数和点光源的参数是很相似的。但是,有⼀个新的参数叫做Spot Angle
Spot Angle决定光锥度数的⾓度
⽆论直接和间接照明,聚光灯⼯作完全像点光源。你有同样的局限性和优势。因此,在游戏中设置灯光平衡时必须⼩⼼。
注意,你可以总是使⽤阴影和烘烤以平衡外观和性能
区域灯光
第 16 页
区域光是在⼀个平⾯的矩形区域的所有⽅向上发出的光。这个矩形是定义在宽度和⾼度属性。区域光仅在光贴图烘焙时可⽤,这意味着它们在运⾏时不会对对象产⽣影响。
选择点光源并将其类型更改为区域,并将其名称改为区域光。下⼀步,把灯放在盒⼦⾥,然后在检查员⾥⾯改变宽度和⾼度,以盖住盒⼦⾥⾯的整个区域。
第 17 页
通过查看区域灯光参数,你会发现⼤多数的参数都类似于以前的,例如,Draw Halo, Flare, Render Mode, 以及Culling Mask.
真正的新参数是宽度和⾼度。两者都⽤来设置矩形光区的⼤⼩。
如果你按播放,你会看到该地区的光是投在其范围内的所有对象的光。矩形的⼤⼩由宽度和⾼度属性决定。光被投射的⼀侧是平⾯的法线,与光的正z⽅向相同。光从矩形的整个表⾯发射出去。正因为如此,阴影和阴影从受影响的对象往往是⽐点光源或定向光源要柔和得多。
第 18 页
区域光的照明计算相当处理器密集型,所以它们在运⾏时不可⽤,只能被烘烤成光贴图。
结论
这结束教程关于照明Unity 5。你了解了⼏种照明效果和配置。有了这⽅⾯的知识,您现在可以应⽤⼏个照明效果到您的游戏或应⽤程序
先看看本案例的部分效果截图:
本文小姐姐以一个办公场地为例,和童鞋们再次讨论Unity3d室内场景的灯光布设、光影烘焙和后处理,希望对初学者有所帮助,本例的3dmax场景如下两图所示,其中第二张图为从后面观察的截图。这个场景的模型面数原本为90多万,面线纵横交错,彷如蜘蛛网,为了优化场景和方便图解,小姐姐用3dmax最优化低面数精简单面建模方法重构了这个场景,由下图左上角的统计信息可见,面数缩减到了21.5万。无论使用Unity3d,还是UE4,或者CE等其他引擎,3d模型都必须用尽可能少的面数来构建,否则后期的光影烘焙和实时运行会遇到灾难性的卡顿,这是小姐姐反复强调的话题了,相信一些童鞋已经感同身受,但是还有一些童鞋硬着头皮往前冲,继续沿用效果图和动画的建模方法构建场景,最后一定会因模型面数太高绊倒在光影烘焙和作品实时运行这个坎上。因此对于VR和游戏场景,模型师一定要采用最优化低面数精简的单面建模方法来构建,无论使用3dmax、maya、C4D、Blender、Sketchup、Modo,还是其他3D建模软件,都应力求降低模型面数。需要说明的是,若在阅读本文过程中有什么疑问,可V询(qtpl_wx)小姐姐,也可去淘小姐姐的Unity模型预处理布光烘焙后处理特效美工场景优化实战教程。
由上面两图可见,小姐姐重构的场景,拓扑布线简洁平整,看上去很舒服,而且编辑 *** 作流畅无卡顿。
1. 场景结构解析
为了便于童鞋们对本例后续的理解,小姐姐先对这个场景的构造作一详解。由上面两图可以看到,这个场景是一个办公场所,从下到上分别由-1层(地下室)、1层、2层三部分组成,为方便观察,小姐姐将这三层拉开如下图所示。有童鞋可能会认为这三层都无屋顶,其实不然,因为小姐姐是用单面建模构造的场景,这个场景主要表现室内,所以屋顶的正面朝下,从上面看到的是屋顶的背面,所以看上去似乎是镂空的,这是单面建模的特点,面的背面都是镂空的,而当我们从室内观察的时候,屋顶是可见的,如下面第二张图所示。
三层之间是通过楼梯间贯通的,如下图所示,为了让大家看清关系,小姐姐将楼梯间水平向外移动了,并且楼梯间有玻璃幕墙,用来采光。
这个场景乍一看很复杂,仔细的童鞋会发现1、2层大致是左右对称的,如下图所示,这样以来,对于1、2层,我们只需搞清下面第二张图红线部分即可。
下面我们就先来看二层右半部分,室内陈设如下两图所示,其中有沙发、茶几、装饰品、挂画、饮水机、资料柜、椅子、接待台、转角办公桌椅、集中办公桌椅、打印机、复印机、台式电脑、笔记本电脑、货架、饮水杯、台灯、洗脸盆、马桶、书柜、玻璃隔断等。
二层右半部分的功能分区如下图所示,楼梯间右半部分有接待区、大办公区、两个小办公区、会客室、走廊、卫生间等。
通过以上的图解,相信大家对二层右半部分的结构就搞清楚了,与此同时,整个二层结构(如下图所示)也就都明白了。
二层结构搞清楚之后,我们再来看一层(如下图所示),由下图可见,一层与二层相比只是家具布局不同,建筑结构完全相同。
接下来我们再看看-1层,如下图所示,这一层比较简单,一目了然,没有窗户,采光主要依赖于屋顶的格栅灯。
楼梯间与地下室、一层、二层的联结关系如下三图所示,从图中大家可以看到这三层的墙体都有踢脚线和阴角线。
通过以上的图解,大家应该对这个场景的结构有了详细的了解,同时大家也可以看到最优化低面数精简单面建模方法构造的场景边面简洁平整,编辑 *** 作清晰流畅,可大幅度降低模型面数的优势。
2. 模型阶段预处理
小姐姐在别的文章中反复强调,用于VR和游戏的模型,无论你是用3dmax、maya、C4D、Sketchup、Rhino、lightwave、softimage、
blender还是modo等其它软件建模,都必须采用最优化的低面数精简单面建模方法构造场景来大幅降低模型面数,以保证Unity3d中场景烘焙的速度和质量及最终作品的实时运行流畅,同时在模型构建完成后,还应针对模型、材质、贴图、灯光、视锥剔除、遮挡剔除、LOD、和碰撞物进行优化预处理,以免场景导入Unity3d后才发现需要返回建模软件进行前置处理而白白浪费时间。
VR和游戏开发是一项多人协同的作业,建模师虽然不参与美工和程序,但也必须了解这两个阶段对模型阶段要求,除了采用最优化的低面数精简单面建模方法构造场景外,建模师还应了解一些优化预处理的知识点,下面小姐姐对这方面的知识点作一详解。
⑴. 建模方法的优化
很多刚刚接触Unity3d的童鞋,一直沿用以前做效果图和动画的建模方法,也就是习惯用建模软件提供的标准几何体堆砌场景,或者用二维线拉伸、旋转、放样等构件场景物体,并不间断地使用一些布尔运算开洞,这样的建模方法构造的物体面数非常多,模型自交严重,很多面都是无用的,Unity3d甚至UE4、Cryegine、寒霜等所有引擎,都强烈建议使用最优化的低面数精简单面建模方法来构建场景,简单地说,就使用最少的面数来构建场景,因为模型面数是造成卡机的最大祸首,有的童鞋很偏执,就是不改陋习,非要用自己习惯的方法建模,那没问题,往前走几步,必然卡顿在超高的模型面数上。建模方法不同,构建的同一物体的面数千差万别,因为游戏和VR引擎的场景是实施运行的,不像效果图和动画一样,最终只渲染成静帧图片或图片序列,从建模开始,就不注意控制模型面数,会导致后续的很多处理很难推进。最优化低面数精简单面建模,就是用简单的poly,通过切分面线,然后推拉构造物体,有效避免了模型自交,还可大幅度降低模型面数,所以建议大家使用小姐姐推荐的方法来构建场景,上面大家看到的案例场景,就是小姐姐自己构建的,面线平整简洁,面数很低。
⑵. 模型拓扑布线优化预处理
在前面的图示中,大家一定看到如下图所示的物体,我们不妨将它单独移出来,一定有人会问,小姐姐为什么要这样建模呢?这就是所谓的拓扑布线问题,也就是物体上的边线布设问题。一般情况下,物体(poly)的布线应根据物体的造型、材质、贴图、形变以及拆分UV2的需要来布设,同时这些边线的布设决定着模型面数的多少,不合理的布线会使模型的面数急剧上升。
有了解单面建模的童鞋存在很多疑问,觉得单面建模就是尽可能减少模型面数,一些模型的某些面上明明不需要边线,却发现某些面反而布设了边线,这正是物体的布线要根据物体的造型、材质、贴图、形变以及拆分UV2的需要来布设的原因。下面我们先来说说根据物体造型需要的布线(也就是可编辑多边形的边面切分或分割),因为上图那个位置有个窗户,我们需要在那个位置开个窗洞,一般情况下,按照最优化低面数精简单面建模的方法,先构造一个和窗户墙等大的几何体(如下第一张图所示),然后将需要开洞的面的上下和左右边分别布两条线(也就是连接两条线或者分割两条线),形成如下第二张图所示的网格面。
接下来选择中心的面(如下第一张图红色部分所示)删除,形成下面第二张图所示的洞口,同理,在背面也开一个这样的洞口,然后将两个洞口的边缘线桥接,形成第三张图所示的窗户洞。
一些用过单面建模的童鞋认为这个窗洞就开好了,但是,小姐姐认为,这里还需要对布线作进一步优化。原因是上面的方法将窗户墙的前面分割成了8个面(如下图所示),不仅如此,背面也被分割成了8个面,同时,还给每条外边线各增加了两个节点,把每个外边线分割成了三段,导入Unity后,顶面会因前后面各增加的两个节点,自动连接节点生成如下第二张图的6个三角面,底面和两个侧面也会各生成6个三角面,这个窗户墙会变成64个面,unity3d的模型面是按三角面处理的,也就是3dmax中的四边面到了u3d中,会自动连接每个四边面的对角线转换成三角面的,上面的64个面,就是64个三角面,64个面是怎么来的呢,前后墙面各8个四边面,就是16,窗洞4个四边侧面,加起来就是20个四边面,自动转换成三角面就是40个,窗户墙顶面、底面、左右侧面各自会自动变成6个三角面,这样又有24个三角面,40个三角面+24三角面,总共64个三角面。
如果对布线进行一些优化,即将下图中2、3节点与节点1焊合(或叫合并),5、6节点与节点4焊合,7、8节点与节点6焊合,10、11节点与节点9焊合,形成如下第二张图所示的布线,窗户墙的前面就只被分割成了4个四边面,同时也不会分割相邻面的边,这样以来,整个窗户墙(前后各4个四边面,顶底和左右两侧4个四边面、窗户洞4个四边面)总共16个四边面,导入u3d自动转换成32个三角面,这与前面的布线方法相差一半,有的童鞋说,相差一半关系不大,1和2相差一半,没什么区别,大家可别忘了,一个场景50万面和100万面,200万面和400万面区别可就大了。
如果不优化拓扑布线,这样的物体被大量复制,模型面数会急剧成倍上升,小姐姐这个例子比较简单,如果造型复杂,不优化拓扑布线,可不就是2倍的关系了,这也就是这个场景中小姐姐使用这种布线的原因。
下面用图示比较一下同一个物体在3dmax中不同布线之后四边面和顶点区别以及导入Unity3d之后转换为三角面和顶点的情况,如下面两图所示。
从上面的图示可见,不同的拓扑布线,模型的面数和顶点数是不一样的,有童鞋会问,为什么要强调模型的顶点数呢?因为模型的面是由线构成的,线是由顶点构成的,与其说模型的面数太多造成的卡顿,不如说是由顶点太多造成的,有童鞋肯定不服,那我们就在自己熟悉的建模软件中通过修改段数构造一个上千万个面的茶壶,然后将所有面全部删除,只留下顶点,我们会发现,即使没有模型面,顶点太多一样很卡的,也就是说真正的卡机其实就是由顶点引起的,所以在建模的时候,既要控制面数,也要控制顶点数,小姐姐用斜向布线就是让多个三角面或四边面共享顶点,以控制顶点的数量,下图所示的物体,如果用实体建模,顶点和面数会过千,小姐姐只用了几十个面和顶点。
有的童鞋对小姐姐推荐的最优化低面数精简单面建模不以为然,也不服气,来,小姐姐给你一些图震撼一下,请看下面的图。(非常抱歉,由于这里的文章有字数限制,导致本文无法完整展现,因此您可去CSDN博客阅读小姐姐的完整同名文章)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)