Unity 5中闪电般的全局照明演示

一切都在标题中!


Unity 5附带了基于物理的渲染材料PBR ),但是材料只是渲染的一部分。 正如我们今天将要看到的那样,照明对于使场景更具视觉吸引力非常重要。 本文的目的不是要深入研究照明和全局照明,而是要介绍该概念并快速了解Unity中的各种选项及其差异。

直接和间接照明

着色对象时,着色器计算对象与在指定点接收的光之间的相互作用。
当光直接来自其发射点时,我们称之为“ 直接照明 ”。
当光线从表面反射(从1到无限远)后到达时,我们称之为“ 间接照明”

统一照明非常简单:统一照明(点,定向或点光源),默认情况下将获得直接照明。

如您所见,结果并不十分吸引人。 深色区域是黑色的,看起来并不真实。 这是因为没有任何间接照明 ! 因此, 间接照明似乎是基于物理的照明的关键要素。 间接照明直接 照明更为复杂,因为光的反射不仅取决于发射源,还取决于场景的几何形状! 完全实时地进行计算仍然是一个挑战,只有少数技术可以实现(尽管仍然存在某些局限性)。 不幸的是, Unity 5中没有内置这种技术。

让我们看看我们有哪些替代方案可以获取间接照明:

环境光和天窗

环境光背后的概念是用全向光照明每个物体。

尽管它比以前更好(有了合适的环境光,我们可以在阴影中注意到一些细节),但它仍然是伪造的。
提高保真度的一种方法是使用天空盒作为环境源。 天空盒是一种全方位纹理 :对于每个方向,您都可以采样颜色。 这样,环境光会根据物体的法线而有所不同。

静态和动态对象

在继续之前,我需要介绍Unity中动态对象和静态对象的非常简单的概念。
静态对象不能更改(移动,旋转,缩放,更改材质或设置动画),而动态对象则不能更改。 这个概念不仅限于照明,因此gameObject上具有不同的静态属性(它只能是lightmap staticnavigation static等)。

在本文中,我们仅关注lightmap static

烘焙的全球照明

使用烘焙的全局照明 ,我们可以在构建期间将间接照明烘焙为光照贴图,并在运行时对其进行解码。
主要缺点是仅静态几何图形和静态灯光会影响间接照明。 虽然动态对象可以使用光探测器接收间接照明,但它们对它没有任何影响。 使用烘焙的GI ,您将无法拥有动态的昼夜周期,任何动态的灯光都不会影响GI 。 另一个缺点是烘烤时间,对于大型场景,烘烤时间可能非常长(从几分钟到几小时)…

如您所见,结果非常吸引人,并且可以获得额外的效果,例如将“ 环境光遮挡”烘焙到光照贴图中以提高保真度。

预先计算的实时全局照明

不要误导,即使它说的是实时,它也必须预先计算。
预计算的Realitme全局照明的概念是烘焙有关场景几何的部分信息,并使用这些数据计算运行时的最终输出。
这样,仅几何形状需要是静态的,灯光可以移动,改变强度和颜色,并且仍然对GI有所贡献。 这是向前迈出的一大步,因为使用此技术,您可以进行昼夜循环,并且仍然具有良好的全局照明

发射物体

最后, 自发光对象是一种特殊情况,因为它们同时被视为几何和灯光。
最重要的是,来自这些对象的直接照明的计算要复杂得多。 因此,要从中获得任何类型的照明,您将需要使用烘焙GI实时GI 。 在这两种情况下,对象都必须是静态的。 不要忘记在材质中设置“ 全局照明 ”。 烘焙的GI实时GI之间的区别在于,您可以更改实时GI中的发射颜色(您需要调用一个函数来更新GI: RendererExtensions.UpdateGIMaterials)


全局照明是一个广泛的主题,在本文中我没有提到很多事情。 这是视觉保真度的关键元素,您不应忽视它。 本简介将在以后的文章中用作我们的参考。


阅读我们的寻路说明指南

或查看我们最新的每周博客

下周见!