1
2
3
4
5
6
  • AR开发
7
8
  • 系统优化与发布

光照系统

发布时间:2021-02-26 22:52   发布人:焦卫峰   浏览次数:570

1.全局光照

Global Illumination简称GI,即全局光照。

用来模拟光的互动和反弹等复杂行为的算法。包含直接光、间接光、环境光以及反射光、自发光材质的光照系统。

间接光是从一个对象弹射到另一个对象的光。

环境光是场景周围存在的光,并非来自任何特定的光源对象。

通过GI算法可以使渲染出来的光照效果更为真实丰富。

2.直接光照

从光源直接发出的光,通过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贴图可以制作镜子反射的效果。

3.间接光照

物体表面在接受光照后反射出来的光。

通过 Light 组件中 Intensity 反弹强度控制。

可以通过 Scene 面板 Indirect 模式查看间接光照。

 

注意:

只有标记 Lightmaping Static 的物体才能产生间接反弹光照。

4.环境光照

作用于场景内所有物体的光照,通过 Environment Lighting中Ambient 控制。

Ambient Source 环境光源

    -- Skybox 通过天空盒颜色设置环境光照

    -- Gradient 梯度颜色

        Sky 天空颜色、Equator 地平线颜色、Ground 地面颜色

    -- Ambient Color 纯色

intensity multiplier 强度倍数

Ambient Mode  环境光GI模式

    -- Realtime 实时更新,环境光源会改变选择此项。

    -- Backed 烘焙,环境光源不会改变选择此项。

5.反射光照

根据天空盒或立方体贴图计算的作用于所有物体的反射效果,通过 Environment Lighting 中 Reflection 控制。

Reflection Source 反射源

    -- Skybox 天空盒

    Resolution 分辨率 

   Compression 是否压缩

intensity multiplier 强度倍增

Reflection Bounces 使用 Reflection Probe 后允许不同游戏对象间来回反弹的次数。

6.实时GI

所谓"实时"是指在运行期间任意修改光源,而所有的变化可以立即更新。

正是由于 Unity 5 引入了行业领先的实时全局光照技术Enlighten 系统,才可以在运行时产生间接光照,使场景更为真实丰富。

 

操作步骤:

1. 游戏对象设置为 Lightmaping Static

2. 启用 Lighting 面板的  Realtime GI

3. 点击Build按钮(如果勾选 Auto 编辑器会自动检测场景的改动修复光照效果)

7.烘焙 GI

当场景包含大量物体时,实时光照和阴影对游戏性能有很大影响。使用烘焙技术,可以将光线效果预渲染成贴图再作用到物体上模拟光影,从而提高性能。适用于在性能较低的设备上运行的程序。

 

步骤:

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 非常低的分辨率

8.混合 GI

选择‘Mixed’烘焙模式,标记为静态的游戏对象会把来自混合灯光的信息保存为光照贴图。但是,与标记为‘Baked’的灯光不同,混合灯光还会为场景中的非静态(动态)游戏对象提供直接光(实时)。

 

步骤

1.场景中创建两个游戏对象,一个设置为Lightmaping static,另一个为动态的

2.设置Light组件Mixed属性。

3.禁用Lighting面板的Realtime Global Illumination,启用 Lighting 面板的 Baked GI。

4.Lighting Mode设置为Subtractive

5.点击Generate Lighting按钮。(如果勾选 Auto 编辑器会自动检测场景的改动修复光照效果)

9.光照探针

由于 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,这时移动小球。

10.反射探针

1.在层级面板空白处右键单击,在弹出的菜单中选择light下的“Reflection Probe”

2.出现一个四面体线框,在反射探测器的检视面板中按下节点命令,四面体的四个面上会出现黄色把手,拖动可以调节探测器的大小,按下探测器检视面板中的移动按钮,可以调整探测器的位置,用这两个命令配合,将探测器调至和房间一样大,或者说让探测器完全包络这个房间,烘焙的时候,会将整个房间烘焙成一个比较小的全景图贴在探测器上,供具有反射的材质映射来实现真实反射。

当场景比较复杂时,可以用多个反射探测器拼合来满足场景的外形,场景中不需要反射的地方,就不需要布置反射探针了。

3.场景中的游戏物体,例如地板,添加standard材质,将Metallic属性和smoothness属性设置为1,就能反射(注意地板要能反射到反射探针的位置,烘焙后可以适当把探针往下移动,直到出现反射为止)

4.烘焙

11.烘焙渲染分类

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

与动态灯光下静态物体的烘焙设置相同,不同的是,需要为运动物体设定光照探针。

12.Light Explorer

Window/Rendering/Light Explorer