Unity教程之-Unity3d中光照贴图Lightmapping技术

 

最近的更新有点缓慢,中秋国庆玩的有点high,好了切入正题,今天我们来看下Unity3d中光照贴图Lightmapping技术 ,Lightmapping光照贴图技术是一种增强静态场景光照效果的技术,其优点是可以通过较少的性能消耗使静态场景看上去更加真实,丰富,更加具有立体感;缺点是不能用来实时地处理动态光照。当游戏场景包含了大量的多边形时,实时光源和阴影对游戏的性能的影响会很大。这时使用Lightmapping技术,将光线效果预渲染成贴图使用到多边形上模拟光影效果。

烘焙参数

Object选项卡

“All”组中的参数

 

Lightmap Static:选中则表示该物体将参与烘焙。

Scale In Lightmap:分辨率缩放,可以使不同的物体具有不同的光照精度。这样可以根据实际场景,令远景中的物体采用较低的分辨率,节省光照贴图的存储空间。而较近的物体采用较高的分辨率,使贴图更加逼真。

Lightmap Index:渲染时所使用的光照贴图索引。值为0,表示渲染时使用烘焙出来的第一张光照图;值为255,表示渲染时不使用光照图。

Tiling X/Y和Offset X/Y共同决定了一个游戏对象的光照信息在整张光照图中的位置,区域。

“Lights”中的参数

Lightmapping:有3种类型可选

1)RelatimeOnly:光源不参与烘焙,只作用于实时光照。

2)Auto:表示光源在不同的情况下作不同的响应。在烘焙时 ,该光源会作用于所有参与烘焙的物体;在实际游戏运行中,该光源会作为实时光源作用于那些动态的或者没有参与过烘焙的物体 ,而不作用于烘焙过的静态物体。在使用Dual Lightmaps的情况下,对于小于阴影距离 (shadow Distance,Unity中用于实时生成阴影的范围,范围之外将不进行实时生成阴影)的物体 ,该光源将作为实时光源作用于这些物体 ,不管是静态还是动态 。

3)表示光源只在烘焙时使用,其他时间将不作用于任何物体。

Color:光源颜色。

Intensity:光线强度。

Bounce Intensity:光线反射强度。

Baked Shadows:烘焙阴影。有三种类型可以选择

1)Off:光源对象不产生阴影。

2)On(Realtime:Hard Shadows):产生轮廓生硬的阴影。

3)On(Realtime:Soft Shadows):产生平滑的阴影。

Shadow Samples:阴影采样数,采样数越多生成阴影的质量越好。

Shadow Angle:光线衍射范围角度。

Bake选项卡

 

Mode:映射方法。

1)Single Lightmaps:最简单直接的方法,对性能及空间的消耗相对较小。可以很好地表现大多数静态场景的光影效果。

2)Dual Lightmaps:在近处使用实时光照和部分Lightmap光照,在远处则使用Lightmap光照,同时在实时光影和静态光影之间做平滑过渡,使得动态光照和静态光照可以很好的融合。

3)Directional Lightmaps:一方面将光影信息保存在光照贴图上,同时还将收集到的光源方向信息保存在另一张贴图中,从而可以在没有实时光源的情况下完成Bump/Spec映射,同时也还原了普通光照图的光影效果。

Quality:生成光照贴图的质量。

Bounces:光线反射次数,次数越多,反射越均匀。

Sky Light Color:天空光颜色。

Sky Light Intensity:天空光强度,值为0时,天空色无效。

Bounces Boost:加强间接光照,用来增加间接反射的光照量,从而延续一些反射光照的范围。

Bounces Intensity:反射光线强度的倍增值。

Final Gather Rays:光照图中每一个单元采光点用来采集光线时所发出的射线数量,数量越多,采光质量越好。

Interpolation:控制采光点颜色的插值方式,0为线性插值,1为梯度插值。

Interpolation Points:用于插值的采光点个数。个数越多,结果越平滑,但是过多的数量也可能会把一些细节模糊掉。所以说采光点并不是越多越来,这容易导致过度平滑。

Ambient Occlusion:环境光遮蔽效果。

LOD Surface Distance:用于从高模到低模计算光照贴图的最大世界空间距离。类似于从高模到低模来生成发现贴图的过程。

Lock Atlas:选中,则会将所有的光照图区域锁定,即将物体使用光照图相关的Tiling X/Y和Offset X/Y属性锁定,同时也将不可以再调整光照贴图的分辨率属性以及添加新的烘焙物体到光照图。

Resolution:光照贴图分辨率。勾选视图窗口右下角Lightmap Display面板的ShowResolution选项,即可显示单元大小。假设Resolution为50,那么在10*10个单位面积的平面网格上将占用光照贴图上500*500个像素的空间。

Padding:不同物体的烘焙图的间距。

Maps选项卡

Light Probes:用于设置当前使用的Light Probes Group的引用。

Array Size:设置光照贴图个数。

Compressed:启用使用压缩纹理格式。

烘焙

Bake Scene有三个选项:

1)Bake Scene:烘培整个场景,如果场景中有编辑好的Light Probes,那么也同时烘焙Light Probes。

2)Bake Selecte:只烘焙选择的部分。采用Bake Selected功能在原有基础上进行添加或者更新,同时系统会保留之前的光照图。这样不会因为部分改动而需要重新烘焙整个场景,只需要烘焙改动的部分,大大提高了烘焙效率。

3)Bake Probes:只烘焙Light Probes。

示例

1 创建一个项目,在场景中绘制如下:

 

选中Cube,在Inspector面板中勾选Static,这样可以使得Cube参与烘焙。

2 打开菜单栏中Window->Lightmapping选项,会弹出Lightmapping视图。此时选中场景中的Directional Light,在Lightmapping视图中的Object标签页中会出现对光源的设置。参数设置如下:

3 Bake标签页下参数设置:

                                                          

4 在Scene视图右下角的Lightmap Display对话框中勾选Show Resolution复选框,就可以看到光照图在模型上的分辨率。

5 单击Lightmapping视图右下角的Bake Scene,选中Bake Scene映射模式,就开始生成Lightmaps。

前后对比效果如下:

1)烘焙后:

2)烘焙前:

 

注:必须将plane的属性设置为Static,否则Cube将不会有阴影显示。

没有将plane的属性设置为Static,效果图如下所示:

好了这就是今天的内容,下篇我们再会!