Global Illumination简称GI,即全局光照。
用来模拟光的互动和反弹等复杂行为的算法。包含直接光、间接光、环境光以及反射光、自发光材质的光照系统。
间接光是从一个对象弹射到另一个对象的光。
环境光是场景周围存在的光,并非来自任何特定的光源对象。
通过GI算法可以使渲染出来的光照效果更为真实丰富。
从光源直接发出的光,通过Light组件实现。
Type 类型: 灯光对象的当前类型
Directional Light 平行光:平行发射光线,可以照射场景里所有物体,用于模拟太阳。不受位置影响,旋转可以模拟白天黑夜效果。
Point Light 点光源:在灯光位置上向四周发射光线,可以照射其范围内的所有对象,用于模拟灯泡。
Spot Light 聚光灯:在灯光位置上向圆锥区域内发射光线,只有在这个区域内的物体才会受到光线照射,用于模拟探照灯。
Area Light区域光:由一个面向一个方向发射光线,只照射该区域内物体,仅烘焙时有效,用在光线较为集中的区域。(片光注意要关闭实时GI,打开bake GI)
Range 范围:光从物体的中心发射的范围。仅适用于点光源和聚光灯。
Spot Angle 聚光角度:灯光的聚光角度。只适用于聚光灯。
Color 颜色:光线的颜色。
Intensity 强度:光线的明亮程度。
Culling Mask 选择遮蔽层 : 选择要照射的层Layer。
Shadow Type 阴影类型: Hard 硬阴影 、Soft 软阴影
-- Strength 硬度:阴影的黑暗程度。
-- Resolution 分辨率: 设置阴影的细节程度。
-- Bias 偏移 :物体与阴影的偏移。
通过 Mesh Renderer 组件启用禁用阴影
-- Cast / Receive Shadows 当前物体是否投射/接收阴影。
-- Off 不投射阴影,On 投射阴影,Two Sided 双面阴影,
Shadows Only 隐藏物体只投射阴影
阴影剔除:设置显示阴影的距离
Edit->Project Settings->Quality->Shadows Distance
技巧:
灯光作为相机的子物体,灯光会随着相机移动,实现拿着火把进入山洞的效果。
建立模型,或者导入模型后,直接添加light组件,这个游戏物体就变成了一盏灯。还可以对游戏物体添加自发光材质。
灯光可以营造氛围,模拟夜晚效果,添加动画可以模拟火焰跳动、闪电的效果。
利用cookie,可以模拟天空中流动的云在地面投射阴影的效果(在ps中制作带alpha通道的图片,存储为tga格式,选中图片的Texture Type为Cookie,根据赋给的灯光类型改变Light Type)。
使用CubeMap贴图可以制作镜子反射的效果。
物体表面在接受光照后反射出来的光。
通过 Light 组件中 Intensity 反弹强度控制。
可以通过 Scene 面板 Indirect 模式查看间接光照。
注意:
只有标记 Lightmaping Static 的物体才能产生间接反弹光照。
作用于场景内所有物体的光照,通过 Environment Lighting中Ambient 控制。
Ambient Source 环境光源
-- Skybox 通过天空盒颜色设置环境光照
-- Gradient 梯度颜色
Sky 天空颜色、Equator 地平线颜色、Ground 地面颜色
-- Ambient Color 纯色
intensity multiplier 强度倍数
Ambient Mode 环境光GI模式
-- Realtime 实时更新,环境光源会改变选择此项。
-- Backed 烘焙,环境光源不会改变选择此项。
根据天空盒或立方体贴图计算的作用于所有物体的反射效果,通过 Environment Lighting 中 Reflection 控制。
Reflection Source 反射源
-- Skybox 天空盒
Resolution 分辨率
Compression 是否压缩
intensity multiplier 强度倍增
Reflection Bounces 使用 Reflection Probe 后允许不同游戏对象间来回反弹的次数。
所谓"实时"是指在运行期间任意修改光源,而所有的变化可以立即更新。
正是由于 Unity 5 引入了行业领先的实时全局光照技术Enlighten 系统,才可以在运行时产生间接光照,使场景更为真实丰富。
操作步骤:
1. 游戏对象设置为 Lightmaping Static
2. 启用 Lighting 面板的 Realtime GI
3. 点击Build按钮(如果勾选 Auto 编辑器会自动检测场景的改动修复光照效果)
当场景包含大量物体时,实时光照和阴影对游戏性能有很大影响。使用烘焙技术,可以将光线效果预渲染成贴图再作用到物体上模拟光影,从而提高性能。适用于在性能较低的设备上运行的程序。
步骤:
1. 游戏对象设置为 Lightmaping Static。
2. 设置Light组件Baking属性。
3. 启用 Lighting 面板的 Baked GI。
4. 点击Generate Lighting按钮。(如果勾选 Auto 编辑器会自动检测场景的改动修复光照效果)
Light 组件 Baking 属性:烘焙模式
-- Realtime 仅实时光照时起作用 。
-- Baked 仅烘焙时起作用 。
-- Mixed 混合,烘焙与实时光照都起作用。
可以通过 Scene 面板 Baked 模式查看光照贴图。
Lightingmapping settings:
Lightmap Resolution:烘焙光照贴图分辨率,建议比实时GI分辨率高10倍。
Lightmap Padding:光照贴图中各形状间距,取值2到200。
Compressed:是否压缩光照贴图,压缩则提高性能,缩小容量,但画质会降低。
Ambient Occlusion:环境遮挡表面的相对亮度,值越高遮挡处和完全曝光处区别越大,建议为1。
Final Gather:选中后提高烘焙质量,但会消耗更多时间。
Directional Mode 定向模式:
-- Non – Directional 无定向模式,使用1种光照贴图存储光照信息。
-- Directional 定向模式,使用2种光照贴图存储光照信息,相比之下效果更好,但空间占用更大。
-- Direction Specular 定向反射模式,使用4种光照贴图存储光照信息,效果最好,但占用空间最大。
除无定向模式外必须运行在GLES2.0与SM2.0以上的设备。
GLES 指 OpenGL ES 针对移动端,从 iPhone5s 开始支持;
SM 指 Shader Model 针对 PC 端,目前大部分显卡支持。
Indirect Intensity 最终间接光照、反射光照的强度。1为默认强度,小于1则减低强度,大于1则增大强度。
Bounce Boost 增强间接光照。
Lightmap Parameters 高级GI参数。
-- Default 默认
-- Default – HighResolution 高分辨率
-- Default – LowResolution 低分辨率
-- Default – VeryLowResolution 非常低的分辨率
选择‘Mixed’烘焙模式,标记为静态的游戏对象会把来自混合灯光的信息保存为光照贴图。但是,与标记为‘Baked’的灯光不同,混合灯光还会为场景中的非静态(动态)游戏对象提供直接光(实时)。
步骤
1.场景中创建两个游戏对象,一个设置为Lightmaping static,另一个为动态的
2.设置Light组件Mixed属性。
3.禁用Lighting面板的Realtime Global Illumination,启用 Lighting 面板的 Baked GI。
4.Lighting Mode设置为Subtractive
5.点击Generate Lighting按钮。(如果勾选 Auto 编辑器会自动检测场景的改动修复光照效果)
由于 LightMapping 只能作用于 static 物体,所以导致运动的物体与场景中的光线无法融合在一起,显得非常不真实。而 Light Probes 组件可以通过 Probe 收集光影信息,然后对运动物体邻近的几个 Probe 进行插值运算,最后将光照作用到物体上。
步骤:
1.创建游戏对象 Light Probe Group。
2.添加侦测小球 Add Probe。
3.点击 Build 按钮。(如果勾选 Auto 编辑器会自动检测场景的改动修复光照效果)
4.需要侦测物体的 MeshRenderer 组件的 Probe/Light Probes 属性不能选择off
案例:
场景中一个面片(static),添加两盏point灯,一红一绿,烘焙。添加小球,不设置成static,当小球在面片上移动时,不能使是反映光线的变化。使用上面的步骤1-3,这时移动小球。
1.在层级面板空白处右键单击,在弹出的菜单中选择light下的“Reflection Probe”
2.出现一个四面体线框,在反射探测器的检视面板中按下节点命令,四面体的四个面上会出现黄色把手,拖动可以调节探测器的大小,按下探测器检视面板中的移动按钮,可以调整探测器的位置,用这两个命令配合,将探测器调至和房间一样大,或者说让探测器完全包络这个房间,烘焙的时候,会将整个房间烘焙成一个比较小的全景图贴在探测器上,供具有反射的材质映射来实现真实反射。
当场景比较复杂时,可以用多个反射探测器拼合来满足场景的外形,场景中不需要反射的地方,就不需要布置反射探针了。
3.场景中的游戏物体,例如地板,添加standard材质,将Metallic属性和smoothness属性设置为1,就能反射(注意地板要能反射到反射探针的位置,烘焙后可以适当把探针往下移动,直到出现反射为止)
4.烘焙
1.静态灯光下静态物体
烘焙GI
主光源的灯光模式(Mode)设定为“baked(烘焙模式)”。第二步将需要烘焙的物体设定为“Static(静态)”,如果不设定为静态,烘焙之后没有任何效果。第三步将lighting(光照)面板中Realtime Lighting(实时光照)下的Realtime Global ILLumination(实时全局照明)选项取消勾选,保留Mixed Lighting(混合照明)下的Baked Global ILLumination(烘焙全局照明)选项的勾选。
2.静态灯光下动态物体
混合GI
首先将运动物体解除“Static”设定,或者说,运动物体不要勾选“Static”选项;接下来将主光源的灯光模式(Mode)设定为Mixed(混合)模式;然后将lighting(光照)面板中Realtime Lighting(实时光照)下的Realtime Global ILLumination(实时全局照明)选项取消勾选,保留Mixed Lighting(混合照明)下的Baked Global ILLumination(烘焙全局照明)选项的勾选。最后将Mixed Lighting(混合照明)下的Lighting Mode(光照模式)改为“Shadowmask(阴影遮罩)”,这样实时光照的阴影就可以和烘焙阴影很好地融为一体。
最后还需要为运动物体设定“Light Probe Group(光照探针)”,用来收集运动物体可能到达处的环境光照信息,以保证运动物体在不同位置的正确光照。
3.动态灯光下静态物体
实时GI
灯光在运行时需要改变且场景中无运动物体(如窗帘慢慢拉开时阳光投逐渐射进室内的照明、涵洞中的油灯照明等)
设置静态物体为static,设置灯光为realtime,勾选Realtime Global illumination,取消勾选Backed Global Illumination。
4.动态灯光下动态物体
实时GI
与动态灯光下静态物体的烘焙设置相同,不同的是,需要为运动物体设定光照探针。
Window/Rendering/Light Explorer