虚拟物体为什么看起来真实?很大程度是因为光照。现实中光源的方向、色温、高光等条件,会改变物体的外观,有光感明暗交错,有阴影,一个物体才能看上去真实。因此模拟现实环境中的光照感觉,是 AR 物体栩栩如生的关键。

光估测的概念就是提供对现实环境的光照分析,将现实世界的光照感觉拓展到数字场景中。光估测 API 通过分析给定图像的离散视觉提示,获得特定场景的光照信息,ARCore 再使用这些信息对同一场景下的虚拟对象进行渲染与照明,增加物体的真实感,达到虚实交融效果。

光照因素与概念

当虚拟物体缺少阴影或表面的闪光材质不能反射出周围环境时,即使用户说不出具体原因,也觉得物体不太真实。所以想提升 AR 的沉浸式和真实感,渲染 AR 物体与场景光匹配至关重要。

光估测通过采样并分析大量详细数据,为开发者解决了以上难题。这些数据可以允许你在渲染虚拟对象时重现各种光照信息,其中包括阴影、环境光、明暗变化、镜面高光与反射。

以上这些光照信息名词,可参照以下解释:

  • 环境光(Ambient Lighting):环境光是来自周围环境整体的散射光,为处于环境中的所有物体提供照明。

  • 阴影(Shadow):光影通常具有方向性,也指向了光源方向。

  • 明暗变化(Shading):是特定图像在不同区域展现出来的不同的光的明暗度。举个例子,同一个物体在同一个场景中,表面光的情况也会随着观察者角度的变化、环境光强度的变化而变化。

  • 镜面高光(Specular highlight):通过直接光源的照射,物体表面会反射高光点。这种物体表面的高光会随着观察者的位置而发生变化。

  • 反射(Reflection):光的反射会根据物体表面是否具有镜面或漫反射的特性而略有不同。例如,一个金属球将具有较高的镜面反射能力,并映出周围环境中的事物。相反,如果球的表面是磨砂材质,灰色,则照到球表面上的光会被散射。现实生活中的很多物体通常兼具镜面反射和漫反射特点,比如一个磨损的保龄球、一张使用很久的信用卡。

有反射能力的物体表面通常还会映射出周围环境的颜色。经过反射后,物体表面呈现的颜色会直接受到周围环境的影响。比如,一个白色的球放置在蓝色的环境中,它的表面也会泛出蓝色。

光估测模式

光估测 API 有多种模式,可以根据不同程度的颗粒度与逼真度来对环境中的光进行估算。

  • 环境 HDR 模式(Environmental HDR modes)(EnvironmentalHDRWithReflections 和 EnvironmentalHDRWithoutReflections)。这些模式是由多个分开的 API 组合而成,可以对直接光源、光影、镜面高光、反射进行颗粒度与逼真度估算。

  • 环境强度模式 (Ambient Intensity mode)(AmbientIntensity)该模式将决定给定图像的平均像素亮度以及光照颜色。这只是一个粗略设置,用于无需精准照明的物体,例如自带烘培光照信息的物体。

  • 禁用(Disabled)。当需匹配的光与给定虚拟场景或虚拟物体不相关时,请禁用光估测模式。

注意 :当你的 App 使用光估测模式时,只有光的强度或设备位置发生重大改变时才会触发更新效果。

使用环境 HDR 模式

Environmental HDR modes

这些模式将运用机器学习来分析输入的相机画面并生成环境光信息,以供虚拟物体渲染。

  • EnvironmentalHDRWithReflections(带反射的环境 HDR 模式) 由三个 API 组成:主定向光、环境球谐光照以及 HDR 立方体贴图。这些 API 可以实现细腻和逼真度的光估测。此模式最适合用于对有高反射镜面物体的场景进行光估测,这样的场景中,物体会镜面反射周围环境。

  • EnvironmentalHDRWithoutReflections (不带反射的环境 HDR 模式)与EnvironmentalHDRWithReflections(带反射的环境 HDR 模式) 大致相同,唯一不同的是后者不调用 HDR 立方体贴图 API。这种光估测模式主要适用于表面无法映射周围环境的物体,比如暗淡哑光材质物体。

注意 :默认情况下,这些 API 中的功能是使用 ARCore SDK for Unity 中包含的 Environmental Lighting prefab 进行配置的。有关使用此预制件、配置以及与光估测有关的其他设置的详细信息,请参阅《 Lighting Estimation Unity 开发人员指南》,文末有链接。

主定向光 

Main directional light

主定向光 API 判断出给定场景中主光源的位置与强度,你可以通过 DirectionalLightRotation 以及 DirectionalLightColor 进行获取。

此信息允许场景中的虚拟对象显示出位置合理的镜面高光,并沿与其他可见真实对象一致的方向投射阴影。

想了解它的工作原理,请看下图。

这是两个相同的虚拟火箭。左图中,火箭下方有一个阴影,其方向与其他的阴影方向不一致。反观右图,火箭的阴影方向与其他阴影方向完全一致。两张图的差别虽然很细微,却是至关重要的。因为当火箭的阴影方向与环境中其他物体的阴影方向一致时,才能达到火箭真的放置在地上的效果,增加数字对象在现实环境中的真实性。

当主光源或被照明对象发生移动时,物体表面的镜面高光会实时改变其相对于光源的位置。

与在现实世界中一样,定向阴影也会随着主光源的改变实时调整影子的长度和方向。想要深入理解这个概念,来看下面两个自然光中的模特,你能分清哪个是真实模特,哪个是虚拟模特吗?

上面两张图中,左边的模特是虚拟物体

环境球谐光照

Ambient spherical harmonics

通过使用 AmbientProbe,ARCore 可以逼真的表示出给定场景中不同方向的环境光。你可以在数字对象的渲染过程中运用这些信息,让虚拟物体看起来更加逼真。

为了让这一特效更好理解,我们还是用相同的火箭模型来举例。下面两幅图中,左边的光估测信息是通过主定向光 API 采集到的。而右侧图片中的数字对象,是通过主定向光 API 和环境球型谐波 API 共同采集与实现的。相比较而言,右侧图中的火箭模型视觉清晰度更高,与周围环境的完美贴合为用户提供了更好的视觉体验。

为了获取理想的光估测条件,请使用 EnvironmentalHDRWithReflection 激活 HDR 立方体贴图。

HDR 立方体贴图 

HDR cubemap

HDR 立方体贴图 API 可以检测光估测数据,帮助你将真实反射渲染到现实环境中的虚拟物体上。

当你使用这个 API 时,ReflectionProbe 将会获取已采集虚拟物体环境光的立方体贴图。在渲染的过程中,这个立方体贴图会对中高光泽度的材质创建反射。

在这个图片中,渲染数字对象前,环境 HDR 模式的三个 API 都用来辅助数字对象的渲染启用。其中 HDR 立方体贴图使得材质表面看起来更有反射感,并且更进一步的把虚拟物品融入在场景里面。

使用立方体贴图会对应用的计算量有少许增加。一个物体表面的材质会产生镜面反射还是漫反射决定了它将如何反射周围的环境,也因此决定了 HDR 立方体贴图是否值得被使用。因为我们的虚拟火箭表面材料是金属,具有强烈的镜面反射能力来反射周围环境,所以启用立方体贴图将为虚拟火箭的渲染效果增色不少。相反,如果虚拟物体是灰色磨砂材质,不具有镜面反射能力,即使启用立方体贴图也无太大用武之地,因为它的颜色更多的是由漫反射成分决定。

立方体贴图还会影响物体的明暗与外观颜色。例如,具有镜面反射能力的物体被蓝色环境包围时,其表面也将反射出蓝色。

下面我们再看其他示例。

下图是在不同光照环境下的同一枚火箭模型。所有这些场景都是通过三个 API 渲染得出的,并使用了定向阴影。

使用“环境强度”模式

Using AmbietIntensity mode

“环境强度”(AmbientIntensity)模式会确定给定图像的平均像素强度与颜色校正参数。这只是一个粗略的设置,用于无需精准照明的物体,例如自带烘培光照信息的物体。

*像素强度(PixelIntensity)。使用环境强度 API 时,PixelIntensity()会捕捉场景中光的平均像素强度。你可以将这一强度值用于照明整个虚拟物体

*颜色。当你使用环境强度 API 时,‪ColorCorrection()会检测每一帧的白平衡,进而您可以对虚拟物体进行颜色校正,使虚拟物体与周围环境的颜色完美贴合。

注意:默认情况下,这些 API 中的功能使用默认的 Session Config 中的“光估测模式”实现配置。有关其详细信息,请参见《Lighting Estimation Unity 开发人员指南》。

  • 光估测 API

    https://developers.google.cn/ar/reference/unity/namespace/GoogleARCore#lightestimationmode

  • 《Lighting Estimation Unity 开发人员指南》

    https://developers.google.cn/ar/develop/unity/light-estimation/developer-guide-unity

想获取更多 ARCore 技术资讯,请关注谷歌开发者菜单 - 开发技术- ARCore 专区。

光立方原理讲解_ARCore HDR 光估测深度解析相关推荐

  1. ARCore HDR 光估测深度解析

    虚拟物体为什么看起来真实?很大程度是因为光照.现实中光源的方向.色温.高光等条件,会改变物体的外观,有光感明暗交错,有阴影,一个物体才能看上去真实.因此模拟现实环境中的光照感觉,是 AR 物体栩栩如生 ...

  2. 直通车运营 直通车扣费原理 直通车优化方案,直通车深度解析

    直通车运营 直通车扣费原理 直通车优化方案,直通车深度解析 今天我们要讲的是怎样将质量得分提高到10分,这也是开直通车需要学习的内容之一.首先需要了解直通车,才能更好的去做优化. 一.直通车的扣费原理 ...

  3. 光立方原理讲解_一分钟讲解光模块原理与结构

    文章导览 光模块简介 光模块的主要参数及意义 光模块的内部结构 光模块的发展趋势 有首歌这样唱: 如果你愿意一层一层 一层地剥开我的心 你会发现 你会讶异... 然而,最后流着泪发现洋葱是没有心的. ...

  4. 光立方原理讲解_90%人不理解什么是防眩光射灯 防昡晕 防炫光,。怎么选项led防眩灯...

    关于LED射灯"防眩光(防炫光)"实在想和各位朋友讲解一下防眩光原理 ,因为我们碰到90%以上装修朋友,总是把眩光理解为简单的不刺眼的光.我可以负责的告诉大家 ,市面上没有不刺眼的 ...

  5. 光立方原理讲解_电工基础知识——光电耦合器的分类、工作原理和检测以及应用...

    大家好,今天我们主要讲解一下光电耦合器的分类.工作原理和检测以及其在生活中的应用. 光电耦合器 1.光电耦合器的分类 光电耦合器分两类:普通光电耦合器和线性光电耦合器.普通光电耦合器的输入.输出间传输 ...

  6. 光立方原理讲解_提清晰度最好方法:线性光+高反差太粗糙业余

    ​ 我先用线性光观察了一下高反差保留多少合适,并不是用线性光+高反差. 视频里不是用线性光+高反差,只是用来观察数值. 知乎视频​www.zhihu.com 看完之后大家可以对比一下你的加清晰度方式, ...

  7. 光立方原理讲解_基于杠杆平衡的防汛挡水板设计原理分析

    图1 近日,微主在"创客焦作"微信公众平台上分享了一款来自瑞典的挡水神器,将这些挡水板彼此拼接在一起,就可以有效地阻挡水流的通过,非常神奇. 创客焦作 来自瑞典的挡水神器 竟然是初 ...

  8. DDR存储原理,AC/DC判别标准深度解析(官方手册整理)

    DDR存储原理 1. 1个三极管和1个电容构成一个最基本的存储单元.多个存储单元组合成存储矩阵,bit line连接到比较放大器,word line控制三极管的通断状态.相邻的.未使用的bit lin ...

  9. SEO技术深度解析(TF-IDF算法原理及公式)

    做为SEO行业老鸟应该听说过TF-IDF算法,TF-IDF算法属于搜索引擎中的核心部分.TF-IDF算法是增加相关词的覆盖率,以及高优布局关键词密度,从而在百度谷歌等搜索引擎内容质量这一项上的排名加分 ...

最新文章

  1. ImageNet十年,AI数据标注如何蓬勃发展?
  2. Android应用坐标系统全面详解
  3. 移民申请--申请澳大利亚技术移民的职业评估有技巧(2)
  4. 方立勋_30天掌握JavaWeb_JavaBean、mvc开发模式、el表达式、jstl标签
  5. laravel 数据库获取值的常用方法
  6. Android之封装倒计时页面
  7. javabean连接mysql数据库,jsp+javabean 链接 mysql 数据库
  8. paip. 解决php 以及 python 连接access无效的参数量。参数不足,期待是 1”的错误
  9. DirectX 9.0c游戏开发手记之RPG编程自学日志之17: Drawing with DirectX Graphics (用DirectX图形绘图)(第13节)
  10. Mysql 日历数据表
  11. 死亡测试 - GoogleTest(五)
  12. tesseract 学习笔记 psm+限定识别内容提升识别精度
  13. #五、再一种正方:2
  14. Nginx之URL重写
  15. 自己动手写三层代码生成器学习总结
  16. linux命令如何分类,Linux系统命令的两种分类
  17. 程序员必备的6个辅助开发的软件神器
  18. pytorch的DP和DDP
  19. python 创建空的numpy数组_真假美猴王-Numpy数据与Python数组的区别与联系
  20. javaweb简单小项目-投票系统

热门文章

  1. 全新的红巨人粒子特效套装插件:TrapCode Suite Mac版
  2. 数据结构考研复试、工作面试常见问题及答案(动画版)
  3. WPF 项目开发入门(一) 安装运行
  4. 知道了这32个网站,你就成了别人眼中的大神!!
  5. iCMS前台存储型XSS漏洞
  6. matlab saber协同仿真,saber中文使用教程SaberSimulink协同仿真
  7. 算一个数的阶乘(例如100的阶乘)
  8. 三维算量软件哪个好?鹏业BIM三维安装算量软件
  9. autosar 时间同步
  10. 【Matlab 六自由度机器人】关于机器人运动学反解的有关问题