打好光线

针对具体平台的指南

要想打造逼真的 AR 体验,关键是确保光线合适。当虚拟对象缺少阴影或有闪亮的材料无法反射周围空间时,用户会感觉到该对象不太合适,即使他们无法解释原因。这是因为人类会下意识地感知关于物体在其环境中的照明方式的线索。Lighting Estimation API 可分析给定图像以获得此类提示,从而提供有关场景中光线的详细信息。然后,您可以在渲染虚拟对象时使用这些信息,在与它们所在场景相同的条件下为其提供光照,从而让用户保持着陆并全身心投入。

灯光提示

Lighting Estimation API 可提供详细的数据,可让您在渲染虚拟对象时模拟各种光照提示。这些提示包括阴影、环境光、阴影、镜面高光和反射。

阴影

阴影通常具有方向性,可让观看者知道光源的来源。

环境光

环境光是从周围环境发出的整体漫射光,使一切可见。

阴影

阴影是光线的强度。例如,同一对象的不同部分在同一场景中可能会有不同级别的阴影,具体取决于相对于观看者的角度及其与光源的距离。

高光高光

镜面高光是指直接反射光源的表面的亮面。对象上的突出显示效果会随着观看者在场景中的位置而发生变化。

反应

根据表面是镜面反射(高反射)还是漫射(不反射)属性,光线从表面的弹射方式不同。例如,金属球会非常反射并反射其环境,而另一个绘制为暗哑光灰色的球则是漫射的。现实世界中的大多数物品都具有这些属性的组合 - 比如破旧的保龄球或常用的信用卡。

反射表面还会捕捉周围环境中的颜色。对象的颜色会直接受到其所在环境的颜色的影响。例如,蓝色房间中的白色球会呈现出蓝色调。

环境 HDR 模式

这些模式由单独的 API 组成,可用于对方向光、阴影、镜面高光和反射进行精细且真实的光照估算。

环境 HDR 模式利用机器学习技术实时分析相机图像并合成环境光,以支持虚拟对象的逼真渲染。

该光照估算模式提供:

  1. 主方向光。表示主光源。可用于投射阴影。

  2. 环境球面谐波。表示场景中剩余的环境光能量。

  3. HDR 立方体贴图。可用于在闪亮的金属物体中渲染反射。

您可以通过不同的组合使用这些 API,但它们旨在实现最真实的效果。

主方向灯

主方向光 API 可计算场景主光源的方向和强度。此信息可让场景中的虚拟对象显示位置合理的镜面高光,并在与其他可见的真实对象一致的方向上投射阴影。

为了理解其原理,我们来看一下两个关于同一个虚拟火箭的图片。在左侧的图片中,火箭下方有阴影,但其方向与场景中的其他阴影不符。在右侧的火箭中,阴影指向正确的方向。这是一种微妙而重要的区别,它可以让火箭置于场景中,因为阴影的方向和强度与场景中的其他阴影更加匹配。

     

当主光源或被照亮的物体在运动中时,物体上的镜面反射高光会相对于光源实时调整其位置。

定向阴影还会根据主光源的位置调整其长度和方向,就像在现实世界中一样。为了说明这种效果,让我们以下面两个人体模型为例:一个是虚拟的,另一个是真实的。左边的人体模型是虚拟模特。

环境球面谐波

除了主方向光中的光能之外,ARCore 还提供球面谐波,表示从场景中所有方向传入的整体环境光。在渲染过程中可以使用此信息来添加微妙的提示,从而呈现虚拟对象的定义。

假设这是两张同一火箭模型的图片。左侧的火箭是使用主方向光 API 检测到的光照估算信息进行渲染的。右侧的火箭是使用主方向光和环境球面谐波 API 检测到的信息渲染的。第二个火箭明显具有更清晰的视觉效果,并且更自然地融入到了场景中。

     

HDR 立方体贴图

使用 HDR 立方体贴图,可在光泽度中等到高的虚拟对象(例如闪亮的金属表面)上渲染逼真的反射效果。立方体贴图还会影响对象的阴影和外观。例如,被蓝色环境包围的镜面物体的材质会反射蓝色色调。计算 HDR 立方体贴图需要少量额外的 CPU 计算。

是否使用 HDR 立方体贴图取决于对象如何反映其周围环境。虚拟火箭具有金属质感,因此它具有强烈的镜面反射分量,能够直接反射周围环境。因此,它从立方体贴图中受益。而采用暗灰色哑光材料的虚拟对象完全没有镜面反射分量。其颜色主要取决于漫射组件,并且无法从立方体贴图中受益。

以下全部三个 Environmental HDR API 可用于渲染以下火箭。HDR 立方体贴图支持反射提示,并进一步突出显示让对象完全位于场景中的地面。

这里展示了同一个火箭模型在不同光照环境下的情景。所有这些场景均使用三个 API 中的信息进行渲染,并应用方向性阴影。

           

环境强度模式

环境强度模式可确定指定图片的平均像素强度和色彩校正标量。这是一个粗略设置,专为不要求精确光照的用例(例如具有内置光照的对象)而设计。

像素强度

捕获场景中光线的平均像素强度。您可以将这种光照应用于整个虚拟对象。

颜色

检测每个帧的白平衡。然后,您可以对虚拟对象进行颜色校正,使其更平稳地融入场景的整体着色中。

环境探测

环境探测可将 360 度相机视图整理到环境纹理(例如立方体贴图)中。然后,这些纹理可用于逼真的虚拟对象光线,例如能够“反射”其所在房间的虚拟金属球。