增强现实——用虚拟光照亮现实世界的物体
Posted
技术标签:
【中文标题】增强现实——用虚拟光照亮现实世界的物体【英文标题】:Augmented Reality – Lighting Real-World objects with Virtual light 【发布时间】:2022-01-17 18:21:41 【问题描述】:是否可以将虚拟灯对象导入 AR 场景,投射出一个光锥,照亮房间中的周围空间和其中的真实物体,例如桌子、地板、墙壁?
对于 ARKit,我找到了这个 SO post。
对于 ARCore,有一个 relighting technique 的示例。还有这个source code。
也有人建议我可以使用后期处理来提亮整个场景。
但是,这些示例是不久前的,也许对于这个问题有更新或更直接的解决方案?
【问题讨论】:
@andy-jazz 我一直在阅读您在 Medium 上关于类似问题的帖子。怎么联系你? 嗨@Yaro!真正需要什么类型的光 – 1) 虚拟对象的虚拟光(即由 RealityKit 引擎渲染),或 2) 真实世界对象的虚拟光,或 3) 虚拟对象的真实世界光(即 Light Estimation 功能) ??? 第二个 - 真实世界物体的虚拟光。这个想法是在 AR 中导入一盏虚拟灯,并模拟这盏灯如何照亮真实的房间和周围的真实物体。 (我也用一些发现更新了这个问题) 【参考方案1】:在底层,RealityKit 只负责渲染虚拟对象并将它们覆盖在相机框架的顶部。 如果要照亮真实场景,则需要对相机帧进行后处理。
这里有一些关于如何进行后处理的教程: Tutorial1⃣️ Tutorial2⃣️
如果您只需要像 This 这样的效果,那么您只需为虚拟对象(灯光)添加基于 CGImage 的后处理效果。
更具体地说,为渲染图像添加布隆过滤器(您也可以使用高斯模糊模拟布隆过滤器)。
这样一来,代码都围绕着 UIImage 和 CGImage,所以很简单?
如果您想要更逼真,可以考虑使用 LiDAR 提供的深度图来计算可以照亮哪些区域以获得更详细的亮度。
或者,如果您是真正的探险家,您可以使用 Metal 实时创建真实世界的 Digital Twin 点云来模拟光的遮挡。
【讨论】:
感谢您的提示,场景可以进行后期处理。但是,我仍然很好奇 AR sdks 是否提供直接操作场景的功能。 在 RealityKit 中,场景只是一个处理遮挡和物理的不可见网格(没有纹理)。因此,即使您可以操纵场景,也只需修改网格。在 AR 中,现实世界只是一张图像,要照亮现实世界,您必须经过后期处理。【参考方案2】:在 2021 年,基于 3D 合成原理的重新照明技术并没有什么新鲜事。目前,当您使用 RealityKit 或 SceneKit 时,您必须借助两个额外的渲染通道(RGB 通道)亲自实现重新照明功能总是需要的)-Normals
通行证和PointPosition
通行证。两个 AOV 都必须是 32 位。
不过,在不久的将来,当 Apple 工程师最终在 Scene Reconstruction 中实现纹理捕捉时,任何缺乏经验的 AR 开发人员都可以应用重新光照程序。
观看此Vimeo Video,了解如何在 The Foundry NUKE 中实现重新照明。
在实现 Relighting 效果时,一个关键点是存在 LiDAR 扫描仪(如果您使用的是 ARCore,则为 iToF 传感器)。换句话说,今天的 ios 重新照明解决方案是 Metal + RealityKit。
【讨论】:
以上是关于增强现实——用虚拟光照亮现实世界的物体的主要内容,如果未能解决你的问题,请参考以下文章