在DXO中怎样调出的意思Color Rendering的路径,已经相机种类的选择的路径

觉得这篇文章不错转过来分享給大家~

屏幕适配是为了让我们的项目能够跑在各种电子设备上(手机,平板,电脑)
那么了解是适配之前首先要了解两个知识点:

单位面积中构成图潒的点的个数。
特点:单位面积内的像素越多分辨率越高,图像的效果就越好

1-2、什么是分辨率?

分辨率可以从显示分辨率与图像分辨率两个方向来分类
示分辨率(屏幕分辨率)是屏幕图像的精密度,是指显示器所能显示的像素有多少.分辨率的单位有:(dpi点每英寸)、lpi(线每英寸)和ppi(像素每英寸)
图像的分辨率越高,所包含的像素就越多图像就越清晰,印刷的质量也就越好
同时,它也会增加文件占用的存储空间

1-3、移动设备分辨率 –以iphone 为例

适应、兼容各种不同的情况

游戏开发中,适配的常见种类

针对不同版本的操作系统进行适配例如Unity3D 5.4系统

Unity2D中摄像机镜头的尺寸决定了我们实际看到游戏内容的多少,在编辑器中我们可以通过调整摄像机Camera的orthographicSize属性值来调整摄像机的大尛


注:Unity3D中这个比例的默认值是100即100像素等于1单位。
如果我们的游戏屏幕有640像素高那么实际换算成单位高度则是6.4个单位,
当我们摄像机的orthographicSize值昰3.2时摄像机大小刚好与屏幕大小相等

4、Unity3D中的屏幕适配设置

4-1:像素适配设置(固定分辨率)

Unity编辑器中只能直接调整摄像机的高度,那摄像机嘚宽度是如何确定的呢
答案就是我们最前面提到的屏幕宽高比。Unity会根据当前屏幕实际的宽高比和摄像机的orthographicSize值来计算出摄像机的宽度值即:
摄像机实际宽度 = 摄像机高度 * 屏幕宽高比

我举个例子说明一下,iPhone4的屏幕像素为640*960宽高比为2:3,假设Pixels To Units值为100那么如果设摄像机高度size值为4.8,那麼摄像机实际宽度按照公式算出6.4刚好就是屏幕的单位宽度。

6、Unity3D中的图片像素比设置

6、Unity3D:关于适配的一些UI问题解决

这里就是重中之重,也是坑點较多的地方

调整相机为设计尺寸,添加Canvas到场景中进行UI设计,但是Canvas默认大小和相机并不重合

2、然后调整Rect Transform组件中的Width和Height为设计尺寸的宽和高,同時将Scale属性的X和Y都调整为0.01(对应unity2d默认情况下像素Pixels与引擎单位Unit对应比例100)这时,Canvas的宽高正好与摄像机相同
这两种方法都可以将UI调整为与设計尺寸一致,并且在编辑器中运行与真机中运行效果保持一致

给摄像机挂下图脚本就可以搞定比例问题:

6-4:设定好就如下图所示


解决屏幕分辨率适配的问题,其实就是解决如何让游戏摄像机尺寸限定在给定范围的问题

1.游戏有效内容,指游戏中一定需要完整显示在屏幕上的内嫆;

2.游戏实际内容指全部的游戏内容,包括有效内容和主要是为了适配多分辨率的或其他不重要的目的而增加的内容

实际的分辨率适配问题与三个尺寸相关,他们分别是:摄像机尺寸游戏内容尺寸(包括有效内容尺寸和无效内容尺寸)和实际屏幕尺寸。

8、了解游戏中嘚摄像机

是向玩家捕获和显示世界的设备通过自定义和操纵摄像机,
你可以使你的游戏表现得真正独特您在场景中摄像机的数量不受限制。
他们可以以任何顺序设定放置在屏幕上的任何地方或在屏幕的某些部分。

确定了屏幕哪些部分将被清除方便多个摄像机画不同嘚游戏元素

Skybox 天空盒:这是默认设置。屏幕上的任何空的部分将显示当前相机的天空盒
如果当前的相机没有设置天空盒,它会默认在渲染設置(Render Settings )选择天空盒

任何空部分屏幕显示为当前相机的背景色。
如果你想绘制一个玩家的枪又不让它内部环境被裁剪,你会设置深度為0的相机绘制环境
和另一个深度为1的相机单独绘制武器。武器相机的清除标志(Clear Flags )应设置 为depth only
此模式不清除颜色或深度缓存。每一帧在丅一帧结束后绘制看上去像是涂抹(smear-looking)的效果。
这在游戏中不常用最好是在自定义着色器(custom shader)上使用。

定义什么绘制方法被用于相机嘚选项

Vertex Lit 顶点光照 :所有被这个相机渲染的物体都将渲染成Vertex-Lit物体
Forward 正向渲染:所有对象每材质渲染只渲染一次,和Unity 2.x中的标准一样
Deferred 延迟照明:所有物体将在无光照的环境渲染一次然后在渲染队列尾部将物体的光照一起渲染出来。


渲染纹理 (Render Texture)包含相机视图输出这会使相机渲染在屏幕上的能力被禁止。

所有照射在该物体上的光源通过一次光能传递渲染完成并且只计算顶点光源

和Shadows。这个Shader对模型的细分同样更加敏感假如在很靠近立方体的地方放置一个
点光源,并且应用这个Shader这个光源只会在此角落进行计算


}

本文整理自Unity全球官方网站原文:

(文章较长,请耐心阅读)

简介 全局光照简称GI,是一个用来模拟光的互动和反弹等复杂行为的算法要精确的仿真全局光照非常有挑戰性,付出的代价也高正因为如此,现代游戏会先一定程度的预先处理这些计算而非游戏执行时实时运算。

同一场景里:没有照明(左)只有直接光源(中),和有间接光源的全局光照(右)的表现注意颜色如何在不同的表面进行光的”反弹”,产生更真实的结果

在本文中,峩们会描述全局光照如何在Unity里运作带领你通过不同的照明技术解释如何在项目里设定照明,并思考如何透过各种工具帮场景打光

广义嘚来说,Unity的全局光照是”实时”或是”预先计算好”的在某些情况下两种方法可以结合使用,照出更逼真的场景本节我们会针对两种技术的差异优势和使用时机做个简单的描述。

预设情况下Unity的灯源(直接光源, 投射灯, 点光源)都是实时的,代表这些灯源会把光线照射到场景並以每一帧的频率更新由于光源是可以在场景内移动的对象,场景灯光的更新是实时的你可以在游戏窗口和场景窗口看到改变。

实时照明的影响:注意到因为没有反射光源的关系阴影是全黑的只有投射光锥体范围内的对象表面才有光源影响。

实时照明是场景里照亮物體最基本的方法用来照亮角色和会动的对象,可惜的是Unity实时照明里的光线不会反射,因此我们才导入了全局光照系统启用了预先计算的技术,都是为了表现一个更逼真的场景

当烘焙一张光照贴图(Lightmap)时,场景内的静态对象会基于光的影响算出一张贴图成果并迭在场景對象之上建立照明效果:

左:一个简单的光照贴图场景成果,右:由Unity产生的一张光照贴图(阴影和光源信息都被纳入计算)

这些”光照贴图”鈳以包含场景内投射到物体表面的直接光源以及在不同物体间反射的”间接光源”,这样的光照贴图可以透过物体材质上的着色器(Shader)描述潒是颜色的表面信息(Albedo)和凹凸(Normals)信息

烘焙光照所产生出来的贴图,是无法在游戏运作的时候变更运算的因此被定义为静态(Static),虽然仍可在这層贴图上继续迭加光源计算但两者已无法交互运算,通常我们采用这光照法来让低阶的手机能顺利执行解决光在游戏中运行的效能问題。

虽然传统的静态光照贴图无法在游戏执行时改变场景光照条件但预先计算的实时全局光照系统能帮我们实时运算复杂的场景光源互動,透过这种方法就能建立昏暗的环境带有丰富的全局光照反射,并实时反映光源的改变好比做个日晷,阴影的位置和颜色会随着光源移动改变这在原本的烘焙光照系统是无法达成的。

一个用GI呈现的日晷案例

为了在合理的帧率实现这些效果我们需要在实时运算之前先将一堆垄长的数字数据做”预计算”,预计算负责计算游戏过程中光的复杂行为它可以在时间空档时进行计算,我们称作一个”脱机”运算

最常见的需求是我们希望间接光源能够列入场景光照贴图的计算,幸好原理上这些间接光源都是从直接光源慢慢转变过来的颜銫,只有少部分特定情况有比较大幅度的颜色改变这样的Unity的全局光照预计算,利用间接光源漫反射(diffuse)特性对运算有利通常好的阴影是透過即时光源所计算出来的,而非烘焙到光照贴图假定我们并不需要太复杂的细节取样,可以大大降低全局光照所产生的数据大小

透过預计算来简化整个流程,有效的降低了原本要在游戏中实时计算的全局光照运算数量如果你要常在游戏中改变光源颜色,旋转光源或是調整光的强度甚至对场景表面做变更,这点就很重要Unity从表面上采样底层贴图,并从广义定义颜色的值到一个大型的群组或是”丛集”,这会产生一个低解析的仿真静态几何以方便我们用来计算光照。

左:场景显示设置为”Albedo”时可以清楚看到由Unity预计算所产生的纹理;右:如同游戏的场景一样,即时光照计算完结果后套用到场景

基本上,当在计算全局光照时我们会针对静态场景周围做”光迹追踪”运算,这是非常耗效能的因此无法苛求要实时运算,相反的Unity把光迹追踪用在计算这些表面的丛集关系 - 在预计算”光传输”的阶段,嘫后把世界串成一个网络结构我们在关键性的游戏过程就不再需要耗费效能的光迹追踪法。

我们有效的创造出一个简化的算法可以在游戲过程中变化输入结构这代表我们可以改变光源或是表面颜色,并很快的看到场景内全局光照的影响算出的结果产出光照贴图透过GPU着銫,并和其他照明或是表面混合最后输出到屏幕上。

虽然可以同时使用烘焙方式的GI和预计算的GI但要注意是同时仿真两个系统,效能负擔也会两次运算的总和不只是因为要储存两套光照贴图在显卡内存,同时着色器也得付出两次的处理成本

最终要选择哪个方法还是要取决于你项目的性质和预期的硬件考虑,例如在手机平台上效能和内存限制较高,烘焙的GI法就会比较适合如果是在有显卡的计算机上戓是游戏机上执行,那可能使用预计算实时全局光照或两个同时使用就比较可行。决定采用哪一种方法可以针对你的目标平台评估记嘚如果项目要同时符合几个不同的硬件需求,往往都是以效能最高的平台为考虑

在Unity里,预计算是在背景执行不管是自动流程或是手动啟用,计算期间你都可以继续编辑你的游戏对象而不受影响预计算的时候会在右下角出现一个进度条,不同的算法会有不同的运算阶段进度条上方也会显示阶段名称与进度。

从上面的例子可以看出11个工作已经进展到第5个,”丛集”还有108件工作要执行完才会到第6个会话数值状态栏表如下:

只有静态对象会被纳入GI预计算,要让预计算启动首先必须最少要有一个静态对象不管是单独设定对象或是从层级選单用Shift + 选择多个对象后一次修改。

从属性面板将对象的Static勾选起来,这会将该物体所有跟静态对象相关的旗标打开包含导航旗标或是批處理旗标,这或许不是你想要的针对预计算只要把”Lighting Static”这个旗标打勾即可。更细部的控制只要点选属性接口Static右边的下拉式选单即可,此外从Window里的Lighting接口也能指定设定静态对象。

如果你的场景设为自动(Lighting->Scene->Auto)Unity的预计算就会自动启动,否则就需要用下列的流程手动执行

假如Lighting接ロ底下Auto这个选项是被勾选的(Lighting->Scene->Auto),那么预计算就会自动在背景不停的改变场景产出的静态几何但如果这个勾选没勾,你将需要点击在Auto旁边的”Build”按钮手动启动预计算这会用同样的方式进行预计算,让你比较好控制计算的开始时间手动启动预计算会对场景所有的照明与各方媔进行重新评估并重新计算,如果你希望有选择性的计算可以从”Build”旁边的下拉选单来选择。

在一个场景同时采用两种方法可能会对效能造成负担最好的做法在同一个时间只用一种方法,要关闭任何一种方法可以从GI的接口(Lighting->Scene)把不要用的方法取消打勾即可,只有有打勾的算法会计算任何相关光的设定都会被覆盖。

Unity里每盏灯光默认的烘焙模式都是”Realtime”这代表这些灯光仍然会照亮你的场景,Unity的预计算GI系统會处理间接光但如果默认的烘焙模式是”Baked”,那么这些灯光将会透过Unity的烘焙GI系统处理直接光源和间接光源产生出来的光照贴图一旦贴箌场景上在执行期间是不能改变的。

一个设定烘焙模式为”Realtime”的点光源

选择烘焙模式为”Mixed”的话场景内的静态对象会被烘焙GI拿去做计算,然而不像”Baked”模式,混合模式的灯光仍会继续运算即时光源到非静态对象上这对于你想把静态环境烘成光照贴图,但同时又希望同樣一盏灯能为会动的角色计算阴影很有帮助

无论是烘焙还是预计算系统,Unity会”缓存”场景的光照数据到”GI快取”并会在计算时尝试重複运用这些数据来节省时间,你对场景的改变会影响这个数据重复利用的多寡

如果你要清除这个快取可以从(Preference->GICache->Clear Cache)来清除,清除后代表所有数據都必须重新运算因次会花费一些时间,在某些情况下你也许需要降低档案空间大小(例如要把项目转到另外一台计算机)是有帮助的

Unity支歭许多著色技术或”路径”,在启动一个项目时必须要订出出一个路线,Unity预设是”Forward Rendering”在”ForwardRendering”里,每个对象著色是根据每个影响对象的咣透过”Pass”来著色,所以有可能一个对象被重复著色了好几次取决于有几盏灯在作用范围里。

这种方法的优点是快速也代表硬件需求低,此外这种正向著色提供了广泛的自定义”着色模型”,可以快速处理透明度也支持像是多重采样柔边(MSAA)的硬件功能,等等有些在其他路径上是无法实现的功能对于图形质量有很大的影响。

然而他的缺点是要为每盏灯光付出相对应的成本也就是说,对象被越多盏燈光影响花费的运算成本就越高,有些类型的游戏必需要大量的光源就会令人望之却步,反观如果你能管理好你的灯光数量那这个蕗径会是一个非常快速的解决方案。

“Deferred”路径是延迟了光的遮蔽与混合信息直到第一次接收到的表面的位置 法线 以及材质数据著色到一個”几何缓冲器”(G-buffer)作为一个屏幕空间的贴图,最后合成这些结果这种方法优点是照明的著色成本是和像素数量成正比,而非灯光数量洇此你不用再管控场景灯光数量,某些游戏类型将会是一个关键优势

“Deferred”路径呈现可预见的效能特点,但通常需要较强大的硬件对于掱机平台支持度也较低。

关于”Deferred”,”Forward”或是其他路径的更多信息可以参阅。

除了要选好著色路径之外一开始选择一个”色彩空间(Color Space)”也昰很重要的事情,色彩空间决定采用哪种算法来计算照明或材质加载时的颜色混合这会对游戏的画面真实感有很大的影响,但大多数情況下太超过的色彩空间设定可能会被目标平台的硬件强制限制。

设定Linear的优点是会让场景内的提供给着色器的颜色也会因为光强度增加变煷如果换成”Gamma”色彩空间,亮度马上会转为以白色做为参考这将不利于图像的质量。

采用Linear和Gamma颜色空间的图像对照表可以注意到切换荿Gamma时颜色快速的换成以白色为光照强度为基准。

Linear另一个好处是着色器能在没有Gamma补偿的情况下对贴图进行取样这有助于确保颜色质量在经過著色管道还能保持一致性,能提高色彩和计算的精度最后屏幕的输出结果更为真实。可惜的是Linear颜色空间有些手机平台甚至有些游戏机鈈支持应该说PC或是一些新手机硬件和次世代游戏机才会支持Linear颜色空间,在这种情况下就得用Gamma方法替代了。

确认你的目标平台是哪一种の后才选择适合的颜色空间是很重要的想要了解更多关于颜色空间的信息,可以参阅

如同颜色空间,相机的”Dynamic range”动态范围是需要指定嘚从本质上来说,这是用来定义相机截取的最亮与最暗的颜色范围要启用HDR可以从相机组件里把HDR项目打勾即可,要注意的是某些手机硬件是不支持HDR的,在著色路径为ForwardRendering并启用MSAA柔边时也不支援HDRHDR和Linear颜色空间一起搭配是最好的,在处理非常明亮的颜色的时候还能保有准确性

茬默认的情况下,Unity是使用低动态范围(LDR)颜色会以每个频道8位储存三原色(红 绿 蓝),8位确切的意思是用8个0或1的数字组合成的值一共会有256种组匼,三个频道256 x256 x 256可以组合出1600万种色采来表达从黑色到白色不同层度的灰阶

在现实环境中,颜色远远超出1600万个色阶颜色和亮度的排列甚至遠远超越了我们人眼所能辨识的,同样的Unity能够处理超出这些范围的颜色并输出高于LDR设备支持的颜色,用来提供给像是计算机画面的高质量结果尽管现今输出装置仍有很多限制,这些多出来的数值仍然可有很多的应用启用HDR之后,会储存更大精度的颜色资料(使用浮点运算表示)能处理更多更亮的颜色范围。

HDR能让我们在同一画面下维持两个巨大差异的亮度例如场景的阴影区域和户外的亮光,我们也可以在環境场景建立一个”光晕”或发光特效透过这些特效或可视的光影效果能增加画面的真实感,但也要小心处理这些效果以防止他们曝光過度

以摄影来比喻的话,如果我们使用不同的曝光度来拍摄我们的场景我们可以先观察到哪些颜色会因为曝光过度而遗失,浅色调在佷亮的区域可能被白色给覆盖过去暗色调可能会被黑色给覆盖,这像是计算机图学的”色调映像”当颜色在显示设备(比如计算机屏幕)表现范围之外时,算法会将颜色修正为装置合理的颜色并重现在屏幕上当相机启用HDR时,建议相机加入Tonemapping这只程序(Assets->ImportPackage->Effects)这只程序可以帮你转换控制超出范围的颜色成为合理的颜色。

更多关于色调映像的数据可以查看

场景中一个照亮整体环境非常重要的就是”环境光”,可以说昰影响场景光源最全面的一个要素环境光很多情况都很有用,也取决于你所选的风格比如卡通风格的阴影不清楚或灯光是手绘风格,環境光也很适合用在当你不想单独调整场景内的灯光但又想要增加整体场景亮度的时候在没有使用Unity 5全局光照的功能时,环境光不会算出准确的物理遮挡但如果开启了任何一种GI的情况下,从Skybox照下来的环境光就能被算出遮挡结果会更加真实。

在同一个场景之下左边是没囿任何光源的场景,右边则开启了环境光可以注意到调整环境光的强度天空盒的亮度并没有改变。

透过将对象设定为静态对象来启用全局光照的场景可以注意到光线在不同的表面有遮挡的效果。

Ambient Source的默认值是”Skybox”上图的天空盒是Unity 5系统产生的一个默认天空盒,带有一个蓝銫调的环境光以及一些用该半球体上纯色与渐变色的设定。要注意的是改变Lighting里面的AmbientSource并不会让Skybox的颜色改变但会影响到场景内环境光照射。

默认的情况下场景中的对象会使用Unity内建的标准着色器(StandardShader)来著色,标准着色器是一个基于物理的着色器(PBS)它会透过模仿真实世界的物理特性像是反射或能量传递等来模拟真实世界里光在材质上的表现。

当使用标准着色器时每一个材质都会具有一定程度的镜面反射(specularity)和金属反射(metalness)属性,在没有强大的硬件来处理即时光迹追踪反射的情况下我们得仰赖预先计算著色反射,我们使用了一个由六张描述天空的图片所組成的方体贴图(Cubemap)或从Unity 5用来从定点搜集环境信息的反射探头(Reflection Probe)产生所需的贴图然后在和其他光和地表信息混合运算来仿真如同我们真实世界看到的反射效果。

在预设的情况下调高Specular和Metalness会更清楚的反射天空盒,反射的来源可以从设定来调整

场景内的对象在默认的情况下会反射忝空盒的内容,但你可以从Lighting接口里找到ReflectionSource属性来改变来源指定一个新的方体贴图,或指定一个反射探头来定义

天空盒的信息不可能包含所有的场景对象,在许多情况下对象从天空搜集反射信息时可能会被遮蔽,像是室内对象或是在类似桥或是隧道等建筑物里的对象为叻要准确反射这些对象,我们必须用反射探头针对这些对象取样这种探头从他们的位置对周围取样并把结果写到方体贴图,可以让周围經过的物体得到环境的反射影像你可以透过GameObject->Light->Reflection Probe来新增一个反射探头,反射探头的位置会决定方体贴图取样的内容以及反射所看起来的样孓,一般来说基于效能考虑反射探头越少越好,请记住反射探头并非用来让物理得到精确结果,而是让游戏世界有更好的反射大多數情况下几个安排妥当的反射探头就很足够了。

左图:场景只有预设的反射设定   右图:场景加入了反射探头后的结果

在反射探头的属性面板我们可以设定Type为实时(Realtime),烘焙(Baked)或自定义(Custom)需要明白的是,实时反射的设定对效能极为不利每多一个实时反射探头就会多出额外六次的著色運算,因此摆设实时的反射探头应该要有明确的需求例如反射会闪动的霓虹灯,否则一般来说建议设成烘焙的就够了效能也会好很多。

需要注意的是只有标记为”ReflectionProbe Static”的对象才会被反射探头取样,从属性接口上静态对象(Static)的下拉选单打勾即可相反的,实时的反射探头会對所有可见的物体取样除非你在屏蔽(Mask)选单指定剔除它。

我们已经介绍了一些在Unity里针对场景照明开始工作之前所需要考虑的条件希望你對目标平台该用哪些设定已经有了一个方向(手机平台采用烘焙GI和Gamma颜色空间,PC或游戏机采用实时GI和Linear颜色空间)接下来让我们来看看有哪些协助制定光源的工具。

“定向光”非常适合用来模拟阳光它的特性就像是个太阳,定向光能从无限远的距离投射光源到场景从定向光发絀来的光线是互相平行的,也不会像其他种光源会分岔结果就是不管对象離定向光源多远,投射出来的阴影看起来都一样这其实对户外场景的照明很有利。

定向光没有真正的光源坐标放置在场景任何地点都不会影响光的效果,只有旋转会影响定向光的照射结果其他囿光源坐标的灯光类型,例如投射灯(Spotlights)角色阴影会因为接近或远离光源而改变,这也许在照亮室内环境时会是个问题一般来说,避免角銫太接近隐形的光源我们会建立一个亮点来假装光源。

使用定向光不用考虑距离不管多远它都会影响场景所有的表面(除非被剔除),当使用延迟(Deferred)著色路径时会造成一些效能损耗要注意的是,使用这个著色路径时光的效能代价和他影响的像素数目是成正比的,但虽然需偠消耗效能起码结果较为统一,因此比较容易调整平衡

旋转预设的定向光会导致天空盒也跟着更新,如果光的角度和地面平行就可以莋出日落的效果把光源转到天空导致变黑就能做出夜晚的效果,从上往下照就会模拟日间的效果如果天空盒有指定为环境光源(Ambient Source),那么忝空盒的颜色就会影响环境里面的对象

点光源可以想象是在3D空间里一个对着所有方向发射光线的点,很适合用来制作像是灯泡, 武器发光戓是从物体发射出来的爆炸效果点光源的亮度从中心最强一直到范围属性(Range)设定的距离递减到0为止,光的强度从光源到距离成反比这是所谓的”平方反比定律”,类似光在现实世界的行为

点光源从它的位置对四面八方射出光线,球形的小图示代表光的”范围”光线到達此范围是会”衰减”到0,但如果有间接光源或反射光则会继续投射

点光源开启阴影运算是很耗效能的,因此必须谨慎使用点光源的陰影为了要给六个不同的世界方向会运算六次,在比较差的硬件开启此功能会造成较大的效能负担

当在场景中加入点光源时要注意,目湔它们不支持阴影的间接反射这代表由点光源产生的光线,只要在距离内有可能会穿过对象反射到另外一面这可能会导致墙壁或地板”漏光”,因此放置点光源要格外注意然而如果是采用Backed GI的话,就不会有这类的问题产生

聚光灯投射一个锥体在他的Z轴前方,这个锥体嘚宽度由投射角度(Spot Angle)属性控制着光线会从源头到设定的范围慢慢衰减到0,同时越靠近锥体边缘也会衰减把投射角度的值加大会让锥体宽喥加大,同时也让边缘淡化的力度变大这现象学名叫做”半影”。

聚光灯有许多用途他们可以用来模拟路灯, 壁灯,或许多创意用法,例洳模拟手电筒因为投射区域能精确的控制,因此很适合用来模拟打在角色身上的光或是模拟舞台灯光效果等等光线会因为离源头越远洏递减,可以注意到光也会因为越靠近锥体边缘而变弱我们称之为半影区,这会因为锥体角度变大而更明显和点光源一样,使用预计算GI时聚光灯不支持间接光阴影,这表示灯光会穿过几何影响到另外一面因此放置投射灯要特别注意。

区域光可以当作是摄影用的柔光燈在Unity里面他们被定义为单面往Z轴发射光线的矩形,目前只能和烘焙GI一起使用区域光会均匀的照亮作用区域,虽然区域光没有范围属性鈳以调整但是光的强度也是会随着距离光源越远而递减。

区域光照亮表面并在区间产生漫反射与柔和的阴影

区域光用在建立柔和的照明效果非常有用光线在任何方向穿过光的表面时会产生不同方向的折射 - 造成在对象上产生漫反射,常见的用途是拿来当作天花板壁灯或是褙光灯为了实现这功能,我们必须从每个光照贴图像素上发射一定数量的光线背对着区域光以确定光有能见度,这代表区域光的计算昰消耗很大的而且会延长烘焙的时间,但如果运用得宜可以增加场景光的深度那么消耗就很值得,值得注意的是区域光只能用在烘焙因此不影响游戏效能。

虽然区域光不支持实时GIUnity提供另外一个柔和的灯光效果叫做发光材质(Emissive Materials),和区域光一样发光材质可以让物体表面發光,他们可以反射场景内像是颜色或是光强度等等能在游戏内改变的光源自发光(Emission)是一个在标准着色器(Standard Shader)内的属性,允许静态对象成为一個发光体预设情况下是0,代表指定了这个材质并不会有任何的自发光反应HDR颜色选择器能指定发光颜色,强度能在0-1的范围调整来建立類似区域光的效果。

发光材质并没有范围属性但从材质发出的光会以二的次方速度递减,自发光材质只会作用在有标记为”Static”或”LightmapStatic”卷標的对象同样的,如果发光材质附加在非静态对象或像是角色的动态对象则不会有任何作用

然而,材质设定只要emission数值大于0即使他们鈈接收场景光源在画面上也会有发光的效果,这种效果也可以透过将emission属性底下的”Global Illumination”改为”None”像这样的自发光材质很适合来模拟霓虹灯等类似的光源。

使用Unity标准着色器并附加自发光材质的一个范例注意从Unity Logo的自发光也会计算阴影,在这个案例让球体有了阴影

发光材质只會影响场景内的静态对象,如果你想要影响像是角色的动态对象就必须采用光探头系统(Light Probes),在游戏周期改变发光材质的值会更新光探头取樣并直接在结果上看到变化。

静态对象只被Unity全局光照GI系统计算为了使动态对象能够和静态场景接收到的光影信息互动,我们需要纪录這些光的信息并做成可以在执行期间快速存取的格式我们在场景放置许多取样点来截取各个方向搜集来的信息,颜色信息会被编成能在遊戏中快速被取出的一组数值(或系数)这些取样点我们称为”光探头”。

使用了光探头的场景注意图中光探头放置位置在光线容易变化嘚地方,例如阴影或是颜色转换的地方

光探头允许移动对象接受由全局光照GI所计算出来复杂的反射光源,对象在著色网格的时候会判断附近光探头的位置并且把光的信息一并融合计算这是透过找寻由光探头所产生的一个四面体,然后决定哪个四面体的落入对象的轴向這样就能让场景内的动态对象正确地接受光信息,如果没有放置光探头动态对象就无法接受全局光照的信息,造成动态对象比场景还要暗

预设的情况下,场景是没有任何光探头的你必须从GameObjects->Light->LightProbe Group自行建立光探头群组。假如全局光照里的Auto是打勾的(Lighting->Scene->Auto)当光源或是静态对象更新时,光探头信息也会实时更新没打勾的话必须点Build运算才会更新。

}

我要回帖

更多关于 调出的意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信