Unity—lightmap,lightprobes,reflection probes

参考转载来源,unity全球官方网站&麦子学院魏知晓&Json_c

       什么是全局光照--Global Illumination/GI?

       什么是光照贴图--LightMap?

       什么是光照探头--Light Probe?

       什么是反射探头--Reflection Probe?

1、全局光照

     :全局照明(GI)是一种系统,用于模拟光如何从表面反射到其他表面(间接光),而不仅限于直接从光源击中表面的光(直接光)。

         相反,物体的光照颜色计算只局限于自身,直接从光源击中表面的光(直接光)即是局部光照(local illumination)。

一个典型的例子是“彩色渗色”,例如,阳光击中红色沙发会导致红灯反弹到其后面的墙上。 另一个是当阳光在洞穴的开口处撞击地板并且在内部弹起时,洞穴的内部部分也被照亮。

        并不能做到真正意义上的现实物理光照,要精确的仿真全局光照非常有挑战性,付出的代价也高,正因为如此,现代游戏会先一定程度的预先处理这些计算,而非游戏执行时实时运算。

传统上,视频游戏和其他实时图形应用程序仅限于直接照明,而间接照明所需的计算太慢,因此它们只能用于非实时场景,如CG动画电影。解决这个限制的游戏方法是计算间接光,只能用于提前知道的物体和表面,不能移动(静态)。这样,慢的计算可以提前完成,但是由于对象不移动,所以以这种方式预先计算的间接光在运行时仍然是正确的。 Unity支持这种称为烘烤GI(也称为烘烤光图)的技术,以“烘烤”命名 - 间接光被预先计算和存储的过程(烘烤)。除间接光之外,烘烤GI还可以利用更多的计算时间,从区域灯和间接光产生比通常可以通过实时技术实现的更真实的软阴影。

         烘烤GI和预计算实时GI都有限制,只有静态对象可以包含在烘焙/预计算中 - 所以移动物体不能将光反射到其他物体上,反之亦然。然而,他们仍然可以使用光探测器从静态物体拾取反弹光。光探测器是在烘烤/预先计算期间测量光(探测)的场景中的位置,然后在运行时,使用来自探针的值来逼近非静态对象的间接光,对象最接近于任何给定时刻因此,例如在白色墙壁旁边卷起的红色球体不会将其颜色渗透到墙壁上,而在红色墙壁旁边的白色球体可能会通过光线探测器从墙壁上吸收红色的颜色。

        实现组成:可实时更新的,  lightmap+lightprobe+reflectionprobe+自发光材质

 广义的来说,Unity的全局光照是”实时”或是”预先计算好”的,在某些情况下两种方法可以结合使用,照出更逼真的场景。

实时照明(REALTIME LIGHTING)

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

realtime_0.jpg

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

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

2、什么是light mapping?

     :对一些静态的物体和光,预先计算存储,不必实时计算,这个过程叫做baking.baking的结果就是一张lightmapping贴图。----针对光照稳定的静态物体。

light mapping动态变化?

烘焙全局光照(BAKEDGI LIGHTING)

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

lightmap.jpg

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

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

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

预计算全局光照(PRECOMPUTED REALTIME GI LIGHTING)

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

timeofdaycycle400.gif

一个用GI呈现的日晷案例

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

预灯光设定(PRE-LIGHTSETTINGS)

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

lightbakingmode_2.png

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

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

GI快取(GI CACHE)

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

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

 Unity5的GI策略:

概述:

       点击 Window > Lighting > Settings 会弹出Lighting窗口,这个就是设置全局光照的窗口。

这个Lighting窗口划分了三个区域:

1、Scene:设置适用于整个场景而不是单个GameObjects。这些设置控制灯光效果和优化选择。

2、Global Maps:显示所有lightmap资产文件生成的GI照明过程。

3、Object Maps:预览当前选中的GameObject的GI lightmap纹理(包括阴影遮罩)。

      下方有一个Auto Generate,勾上它,unity就会自动更新Lightmap 数据,但更新的过程非常耗时,因此不建议勾选 Auto Generate(应该勾选上更快)。可以手动点击Generate Lighting来烘焙。(注意,unity只会烘焙

勾选了Lightmap Static 的GameObject,so 烘焙之前,首先在Inspector 面板最上方的Static 选中Lightmap Static)

       

Scene Tab:

1、Environment

       

Property:

Function:

Skybox Material

天空盒材质

Sun Source

设置一个定向光(directional Light)作为场景里的太阳,如果设置为None,unity则将最亮的定向光作为太阳(太阳:不管你设置的多大远多,光都会照到场景里)

Environment Lighting

环境光设置,影响来自远处环境的光

Source

漫反射环境光(ambient light,场景周围环境的光),默认以天空盒作为环境光。

Color

以某种颜色作为环境光。

    Gradient //梯度

sky, horizon and ground分别选择一种颜色,混合出一种环境光。

    Skybox

天空盒作为环境光,

Intensity Multiplier//光照强度

环境光的亮度,范围是0-8,默认为1。

Ambient Mode //环境模式

指定场景中GI的模式。ambient:环境的,周围的;在MixedLighting RealtimeLighting勾选时,enabled;

    Realtime

实时更新;Choose Realtime if you want the ambient light in the Scene to be calculated and updated in real time.

                若你想要场景中的ambient light/环境光,实时的模拟更新,就选Realtime.

    Baked

烘焙(预先计算场景中的灯光);Choose Baked if you want the ambient light to be precomputed and set into the Scene at run time.

                 若你想环境光被预先计算好并在Run时导入场景,选择Baked

Environment Reflections

全局设置反射参数;These settings control global settings involved in Reflection Probe baking, and settings affecting global reflections.

控制与反射探头烘焙有关的全局设置,并影响全局的反射;

Source

反射源。

    Skybox

天空盒作为反射源。

    Custom

用一个cube map作为反射源。

Compression//压缩

反射贴图是否被压缩。

    Auto

如果适合压缩,那就压缩。

    Uncompressed

不压缩。

    Compressed

压缩

Intensity Multiplier

反射光的强度。

Bounces//反弹

一束光的被反射的次数。

          

2、Realtime Lighting

Property: Function:
Realtime Global Illumination 是否开启实时全景光照。

                                                                                                                            

 

3、Mixed Lighting

      :混合光是由那些具有自身模式属性的光元件/light components被设置混合。

Mixed Lights 可以改变他们在运行期间的Transform/坐标&Visual Properties/光学属性(如颜色,强度),但有很多必须的限制。他们点亮静态和动态的物体,总是提供直接光源,并有选择的提供反射光。

被Mixed Lights点亮的动态物体总是能在其它动态物体上产生实时阴影。

      同一场场景中的所有Mixed Lights使用同一Mixed Lighting Mode。

 a.Baked Indirect mode--间接光烘焙模式

         Only indirect lighting is precomputed

           最适用于中端PC和高端手机。此模式,只预先计算间接光,不预先计算阴影,阴影由Shadow Distance中实时 //Shadows are fully real-time within the Shadow Distance (menu: Edit > Project Settings > Quality > Shadows).

           换句话说, 就像实时光加上间接光照,但不含Shadow Distance外的阴影。                      //Realtime Lights with additional indirect lighting, but with no shadows beyond the Shadow Distance.

          比如大雾天的室外,连接房间的走廊,这些可以用雾遮盖远处缺失的阴影或所有阴影都在shadow distance内.

b.ShadowMask mode

          Indirect lighting and direct occlusion are precomputed

          You also need to select the desired Shadowmask mode to use from the Quality Settings (menu: Edit > Project Settings > Quality):

  • Shadowmask: Static GameObjects that cast shadows always use baked shadows.
  • Distance Shadowmask: Unity uses real-time shadows up to the Shadow Distance, and baked shadows beyond.

c.Subtractive mode

         All light paths are precomputed

         最适用于低端装备。

         混合光照模式中唯一一个将直接光烘焙进光照贴图的,并丢弃了前两个模式中合成静态/动态阴影的信息。

                                                                           

Property: Function:
Baked Global Illumination 是否采用烘焙的全局光照。
Lighting Mode

决定混合灯光和阴影与场景中物体的共存方式;

修改了Light Mode需要重新烘焙,当然勾选了Auto Generate,就不用了,不然要click Generate Lighting。

Realtime Shadow Color 实时阴影的颜色。 

                                                                                                             

猜你喜欢

转载自www.cnblogs.com/bananana/p/8867537.html