Unity学习日志_全局光照GI系统简介
1. 何为GI?
全局光照,简称为GI,是一个用来模拟光的互动和反弹等复杂行为的算法。要精确的仿真全局光照非常的具有挑战性,付出的代价也很高,正因如此,现代游戏会在一定程度上预先处理这些计算,而非在游戏运行时实时计算。Unity的全局光照系统分为Enlighten和Progressive Lightmapper,两者之间可以通过lighting窗口进行切换。
在Unity的5.6版本之前的5.x中,主要使用了Geomerics公司的Enlighten来提供实时全局照明以及烘焙全局照明,在5.6之后Unity引入了新的Lightmapper——Progressive来提供烘焙全局照明并且提供了更多的混合光照模式。
2. 直接光照:
unity中的直接光照由Light组件提供:
1. 平行光(Directional):
平行光的光效与其位置无关,只与其角度有关,类似于太阳的效果。
属性:
-
Color:灯光颜色。
-
Mode:光照模式,有RealTime(实时),Baked(烘焙),mixed(混合)。其中Baked只对LightMap Static物体有效。
-
Intensity:灯光强度。
-
Indirect Multiplier:间接光强度,只对LightMap Static物体有效。
-
Shadow Type:阴影类型,有Soft Shadows(软阴影),hard Shadows(硬阴影),None(无阴影)。
-
RealTime Shadows:实时阴影设置
- Strength:阴影强度/透明度。
- Resolution:阴影分辨率。
- Bias:阴影偏移量
-
Cookie:光线图案。
-
Cookie Size:大小。
-
Draw Halo:是否开启光源光晕。
-
Flare:在选中光源的位置出现镜头光晕。
-
无镜头光晕:
-
有镜头光晕:
-
-
RenderModel 渲染模式:
- Auto:自动,根据光源的亮度以及运行时Quality Settings的设置来确定光源的渲染模式。
- Important:重要,逐像素进行渲染,一般用于非常重要的光源渲染
- Not Important:光源总是以最快的速度进行渲染。
-
Culling Mask:剔除层,被选中的层才会有光效。
2. 点光源(Point):
属性:
- Range:光照范围,也会间接影响光照强度,照的范围越远间接导致其光照强度越强。
3. 聚光源(Spot):
属性:
- Range:与点光源同理。
- Spot Angle:聚光角度,决定开合角度的大小。
4. 区域光(Area):
注意区域光仅限baked模式下使用。所以需要将区域光内物体设置为静态。
属性:
- Shape:区域光形状,有Rectangle(矩形),Disc(圆形)。
- Width:区域光宽度。
- Height:区域光高度。
- (Radius):区域光半径。
- Cast Shadows:场景内静态物体阴影剔除。
3. 间接光照:
物体表面在接受光照后反射出来的光。注意:只有标记 Lightmaping Static 的物体才能产生间接光照。
4. 环境光照:
属性:
- SkyBox Material:天空盒材质。
- Sun Source:太阳光源。
- Environment Lighting:环境光设置:
- Source:环境光源。
- Intensity Mutiplier:强度乘数。
- Ambient Mode:环境光模式。
5. 反射光照:
属性:
- Source:反射源。
- Resolution:反射光分辨率。
- Compression:反射光压缩。
- Intensity Mutiplier:强度乘数。
- Bounce:反弹次数。
6. 实时GI:
所谓"实时"是指在运行期间任意修改光源,而所有的变化可以立即更新。使用实时GI需要勾选以下选项。
此选项勾选后场景中的实时灯光将可以提供间接光照,最直接影响是直接光照模式的realTime可以使用。之后将需要用到实时GI的物体设置为静态(因为间接光只有静态物体可以使用)。
7. 烘焙GI:
勾选此选项后将可以使用直接光烘焙模式。勾选后混合灯光是烘焙的,使用指定的光照模式(baked)和烘焙光都将完全烘焙,且游戏运行时不能调节。
8. 混合GI:
混合GI调节的面板和烘焙GI一样,这里主要选择光照混合模式(Lighting Mode),有Shadowmask,Baked Indirect,Subtractive。
这里以性能较好的Subtractive模式为例(使用时要将自动烘焙选项关闭):
Subtractive模式下,GI会对静态物体使用烘焙,对非静态物体使用实时。
首先先对静态物体进行烘焙:
烘焙完成后将光源移动到非静态物体上:
此时原烘焙并没有消失。
9. 光照探针:
当一个动态物体进入一个烘焙场景后不能得到光源信息无法渲染阴影就显得游戏非常的假,所以这个时候我们就可以引入光照探针组来存储场景中的光源信息,由此为动态物体渲染阴影。
当一个动态物体进入烘焙区的效果(漆黑一片,没有阴影):
添加光照探针后(产生光效)类似效果也可以用混合GI实现:
1. 光照探针组面板:
点击Edit Light Probes后将可以编辑下面的属性。
属性:
- Show Wireframe:是否显示网格(黄球之间的粉线)。
- selected probe position:选中探针的位置。
- Add Probe:添加一个探针。
- Select All:选择所有探针。
- Delete Selected:删除选择的探针。
- Duplicate Selected:复制粘贴所选探针。
10. 反射探针:
反射探针可以增强场景反射效果。也可以用来制作镜子特效(镜子特效也可以使用Render Texture来实现)。反射探针放入场景即可有效。
属性:
- Type:反射探针的类型,有baked,Custom,realTIme。
- Refresh Mode:仅realtime模式下有效,反射探针的刷新时间。
- Time Slicing:仅realtime模式下有效,发射探针的刷新时间间隔。
- Importance:探针重要度,值越高越重要。
- Intensity:反射强度。
- Box Projection:勾选此项后会启动反射UV映射的投影。
- Box Size:反射区域大小。
- Box Offset:反射区域偏移量。
- resolution:反射图像的分辨率。
- HDR:是否启用高动态范围渲染。
- Shadow Distance:渲染探针绘制的阴影距离。
- Clear Flags,Background,Culling mask:和相机中的设置同理。
- Use Occlusion Culling:是否启用遮挡剔除。
- Clipping Planes:探针相机的视野范围。
制作镜子:
-
为一个物体添加反射探针组件:
-
将物体材质shader修改为镜面材质:
-
将物体镜面效果拉至最大:
-
镜子制作完成:
11. Lighting窗口的其他设置:
属性:
- LightMapper:指定烘焙系统用于生成烘焙的光照贴图。
- Enlighten:Enlighten实时全局光照技术。
- Progressive CPU/GPU:渐进光照贴图技术。
- Prioritize View:指定光照贴图是否应该优先烘焙场景视窗中的对象。
- Direct Samples:控制烘焙系统将使用的直接光照计算的样本数量。
- Indirect Samples:控制烘焙系统中使用间接光照计算的样本数量。
- Bounces:控制烘焙系统间接光照计算的最大反弹次数。
- Filtering:指定用于减少烘焙光照贴图中的噪点的方法。
- Indirect Resolution:将每个单位使用的纹理设置为通过间接光照的对象的分辨率,值越高,烘焙时间越长。
- Lightmap Resolution:将每个单位使用的纹理设置为通过烘焙全局光照对象的分辨率,值越高,烘焙时间越长。
- Lightmap Padding:设置烘焙光照贴图中纹理的间隔。
- Lightmap Size:以像素为单位设置光照贴图的分辨率,值按照平方计算,例如1024表示分辨率为1024*1024。
- Compress Lightmaps:是否压缩光照贴图,压缩后会减少存储空间,但有可能存在一些伪像。
- Ambient Occlusion:是否在烘焙贴图的结果中包括环境遮挡,使其能够模拟在其中反射的软阴影。
- Final Gather(enlighten中的设置):启动时,将以额外的时间为代价来提高视觉质量。
- Directional Mode:控制光照贴图是否存储光照环境中的定向光照信息,选项为定向和不定向。
- Indirect Intensity:超过1.0的值将增加间接光的强度,反之降低。
- Albedo Boost:通过增强场景中材料的反照率来控制便面之间反射的光量。
- Lightmap Parameters:允许调整影响使用全局光照生成对象光照贴图的高级参数。
- Other Settings:
- Fog:是否使用迷雾效果。
- Halo Texture:光晕纹理。
- Halo Strength:光晕强度。
- Flare Fade Speed:镜头耀光在初次出现后从视野消失的时间。
- Flare Strength:镜头耀光强度。