打好光线

平台专用指南

要打造逼真的 AR 体验,关键在于正确设置光照。如果虚拟对象缺少阴影,或者其材质光亮但无法反射周围空间,用户可能会感觉到该对象不太合适,即使他们无法解释原因也是如此。这是因为人类会下意识地感知有关环境中对象光照情况的线索。Lighting Estimation API 会分析给定的图片以获取此类线索,并提供有关场景中光照情况的详细信息。然后,您可以在渲染虚拟对象时使用此信息,以便在与虚拟对象所处场景相同的条件下照亮虚拟对象,从而让用户保持沉浸感。

光照线索

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

阴影

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

氛围灯

环境光是来自周围环境的整体漫射光,可让一切物体都可见。

阴影

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

镜面高光

镜面高光是直接反射光源的表面上的光亮部分。对象上的高光会随着观看者在场景中的位置而变化。

反思

光线从表面反射的方式因表面是否具有镜面(高反射)或漫射(不反射)属性而异。例如,金属球具有很强的镜面属性,会反射周围环境,而涂有暗哑灰色的另一个球则具有漫射属性。大多数现实世界中的对象都具有这些属性的组合,例如磨损的保龄球或使用过的信用卡。

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

环境 HDR 模式

这些模式包含单独的 API,可用于对平行光、阴影、镜面高光和反射进行精细且逼真的光照估算。

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

此光照估算模式提供:

  1. 主平行光 。表示主要光源。可用于投射阴影。

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

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

您可以将这些 API 以不同的组合方式使用,但它们旨在一起使用,以获得最逼真的效果。

主平行光

主平行光 API 用于计算场景中主要光源的方向和强度。借助此信息,场景中的虚拟对象可以显示合理定位的镜面高光,并以与其他可见的真实对象一致的方向投射阴影。

如需了解其工作原理,请查看同一虚拟火箭的这两张图片。在左侧的图片中,火箭下方有阴影,但其方向与场景中的其他阴影不匹配。在右侧的火箭中,阴影指向正确的方向。这是一个细微但重要的差异,它让火箭在场景中显得更加真实,因为阴影的方向和强度与场景中的其他阴影更加匹配。

     

当主要光源或被照亮的对象处于运动状态时,对象上的镜面高光会相对于光源实时调整其位置。

平行阴影也会相对于主要光源的位置调整其长度和方向,就像在现实世界中一样。如需了解此效果,请查看这两个人体模型,一个是虚拟的,另一个是真实的。左侧的人体模型是虚拟的。

环境球谐函数

除了主平行光中的光能外,ARCore 还提供球谐函数,表示从场景中所有方向传入的整体氛围灯。在渲染期间使用此信息可添加细微的线索,以突出虚拟对象的清晰度。

请查看同一火箭模型的这两张图片。左侧的火箭是使用主平行光 API 检测到的光照估算信息渲染的。右侧的火箭是使用主平行光和环境球谐函数 API 检测到的信息渲染的。第二个火箭的视觉清晰度明显更高,并且与场景的融合度更高。

     

HDR 立方体贴图

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

是否应使用 HDR 立方体贴图取决于对象如何反射周围环境。由于虚拟火箭是金属的,因此具有很强的镜面组件,可直接反射周围环境。因此,它受益于立方体贴图。另一方面,具有暗哑灰色哑光材质的虚拟对象根本没有镜面组件。其颜色主要取决于漫射组件,因此不会受益于立方体贴图。

以下火箭是使用所有三个环境 HDR API 渲染的。HDR 立方体贴图可实现反射线索和进一步的高光,从而让对象完全融入场景。

这是在不同光照环境下渲染的同一火箭模型。所有这些场景都是使用这三个 API 中的信息渲染的,并应用了平行阴影。

           

环境强度模式

环境强度模式用于确定给定图像的平均像素强度和色彩校正标量。这是一种粗略的设置,适用于对精确光照要求不高的用例,例如具有内置光照的对象。

像素强度

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

颜色

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

环境探测器

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