如何在ARKit中使用环境贴图?

2023-12-31

ARKit 2.0 添加了一个名为 AREnvironmentProbeAnchor 的新类。阅读它的说明,似乎 ARKit 可以自动收集环境纹理(立方体贴图?)。我相信我们现在可以创建一些反映真实环境的虚拟对象。

但我仍然不清楚这是如何工作的,特别是环境纹理是如何生成的。有人有简单的示例代码来演示这个很酷的功能吗?


AREnvironmentProbeAnchor(适用于 iOS 12.0+)是基于图像的照明技术的支柱。模型的 PBR 着色器可以反射周围环境的光线。原理很简单:来自源的 6 个方形图像进入着色材质的环境反射率通道。这六个来源(装备)具有以下方向:+x/-x, +y/-y, +z/-z。下图展示了装备的 6 个方向:

邻近的zFar飞机看起来像Cube,不是吗?

纹理的补丁将在相机扫描表面的特定位置可用。 ARKit 使用先进的机器学习算法来覆盖具有完整 360 度纹理的立方体。

AREnvironmentProbeAnchor用于将该摄影装置定位在场景中的特定点。您所要做的就是在 AR 会话中启用环境纹理贴图生成。有两种选择:

ARWorldTrackingConfiguration.EnvironmentTexturing.manual 

With manual环境纹理,您可以通过创建来识别场景中需要光探针纹理贴图的点AREnvironmentProbeAnchor对象并将它们添加到会话中。

ARWorldTrackingConfiguration.EnvironmentTexturing.automatic 

With automatic环境纹理,ARKit 会自动创建、定位 AREnvironmentProbeAnchor 对象并将其添加到会话中。

在这两种情况下,ARKit 都会在会话收集相机图像时自动生成环境纹理。使用委托方法,例如session(_:didUpdate:)找出纹理何时可用,并从锚点访问它environmentTexture财产。

如果您使用 ARSCNView 显示 AR 内容并且automaticallyUpdatesLighting选项,SceneKit自动检索AREnvironmentProbeAnchor纹理贴图并使用它们来照亮场景。

这是你的代码的方式ViewController.swift可能看起来像:

sceneView.automaticallyUpdatesLighting = true

let torusNode = SCNNode(geometry: SCNTorus(ringRadius: 2, pipeRadius: 1.5))
sceneView.scene.rootNode.addChildNode(torusNode)
    
let reflectiveMaterial = SCNMaterial()
reflectiveMaterial.lightingModel = .physicallyBased
reflectiveMaterial.metalness.contents = 1.0
reflectiveMaterial.roughness.contents = 0
reflectiveMaterial.diffuse.contents = UIImage(named: "brushedMetal.png")
torusNode.geometry?.firstMaterial = [reflectiveMaterial]

let config = ARWorldTrackingConfiguration()
if #available(iOS 12.0, *) {
    config.environmentTexturing = .automatic    // magic happens here
}
sceneView.session.run(config)

然后使用一个session(...)实例方法:

func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {

    guard let envProbeAnchor = anchors.first as? AREnvironmentProbeAnchor 
    else { return }

    print(envProbeAnchor.environmentTexture)
    print(envProbeAnchor.extent)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在ARKit中使用环境贴图? 的相关文章

  • 快速球体结合星数据

    我想构建一个观星应用程序 现在我已经构建了一个球体并用星图覆盖它 基于天体坐标 https svs gsfc nasa gov cgi bin details cgi aid 3895 https svs gsfc nasa gov cgi
  • Ios Swift制作字体切换粗体、斜体、boldItalic、正常而不改变其他属性

    我很惊讶 在 Swift 中简单地为现有字体设置粗体和斜体是如此复杂 我只是想通过在字体类上使用以下方法来简化事情 我希望将以下方法添加到已设置字体系列和字体大小的现有字体中 我需要保留这些并仅更改以下内容 setBold Shud 保留斜
  • NSURLConnection 的 URL 文件大小 - Swift

    我想在下载之前从 url 获取文件大小 这是 obj c 代码 NSURL URL NSURL URLWithString ExampleURL NSMutableURLRequest request NSMutableURLRequest
  • 斯威夫特/iOS。从导航堆栈中删除一些视图控制器

    这是我想做的 但我不确定这是否是正确的方法 所以请给我建议如何去做 我有初始 VC 和导航 VC 我从中推送第一个 VC 从中推送第二个 VC 接下来我介绍 来自第二个 VC 的 NavigationController 第三个 VC 现在
  • 准确地从屏幕上的像素获取颜色并转换其颜色空间

    我需要从屏幕上的像素获取颜色并转换其颜色空间 我遇到的问题是 将值与数字色度计应用程序进行比较时 颜色值不相同 create a 1x1 image at the mouse position if let image CGImage CG
  • Swift 中的字典是否应该转换为类或结构?

    我正在开发一个本机 iOS 应用程序 该应用程序从我们也可以控制的 Web 服务接收 JSON 格式的数据 该计划是在大约 18 个月内更换后端数据库 以支持不同的平台 考虑到这一点 我们希望确保 iOS 应用程序能够相对容易地适应新的数据
  • 如何扩展 Array 以获得泛型类型?

    我有一个链表类 声明如下 class LinkedNode
  • 如何禁用导航控制器(Swift)内特定视图控制器的自动旋转? [复制]

    这个问题在这里已经有答案了 上面根本没有答案 在导航控制器内的特定 不是全部 视图控制器禁用自动旋转时遇到问题 类似的问题并不涉及禁用特定视图控制器的自动旋转的能力 而是涉及禁用导航控制器内所有视图控制器的自动旋转的能力 我的导航控制器包含
  • Swift 和 inout 参数中闭包的变量捕获

    我注意到 当 Swift 中的闭包捕获变量时 闭包实际上可以修改该值 这对我来说似乎很疯狂 也是一种获得可怕错误的绝佳方法 特别是当同一个 var 被多个闭包捕获时 var capture Hello captured func g thi
  • 如何将 WKUIDelegate 实现到 SwiftUI WKWebView 中?

    我正在 Xcode v11 上创建一个 Web 应用程序 但在实现 WKUIDelegate 来显示 Javascript 警报并在 Web 应用程序上正确确认时遇到问题 我在 ContentView swift 上得到了一个非常简单的 w
  • 在 Swift 中动态设置 Dictionary 的属性

    我正在尝试根据字典中的值在类上设置一些属性 目前我正在这样做 let view UIView UIView if let hidden Bool self props hidden as Bool view hidden hidden if
  • 快速检查网络速度

    我想从我的 swift 应用程序检查网络速度 我发现很多帖子描述了Reachability特别是查找连接是否可达以及是 WIFI 连接还是 WWAN 连接的方法 我的问题 是否可以检测 WWAN 的类型 2G 3G 4G 你可以用以下命令检
  • 当前图像选择模式会擦除 UI

    我下面有一个非常简单的视图控制器 UI 实际上只是一个带有底部标签栏的按钮 import UIKit class ImageAdderViewController UIViewController override func viewDid
  • SwiftUI:如何让项目的拖放重新排序起作用?

    我有以下 SwiftUI 视图 struct ContentView View State var model Model var body some View ScrollView LazyVGrid columns columns sp
  • Swift 结构类型集

    说我有一个struct 可以是任何东西 struct Cube var x Int var y Int var z Int var width Int 然后我该如何创建一个Set这些点中 是否存在两个具有相同属性的对象 let points
  • Swift 中的 @autoreleasepool 相当于什么?

    在 Swift 中 我注意到没有 autoreleasepool 构造 尽管 Swift 确实使用了 ARC 在 Swift 中管理自动释放池的正确方法是什么 或者它是否因某种原因被删除 语法如下 autoreleasepool code
  • Swift 1.2 可选外部变量?

    由于 Swift 无法访问编译变量 因此我创建了一个指向编译变量的 Objective C extern 变量 编译变量转换器 h extern NSString const NetworkApiBasicAuthUsername 编译变量
  • 是否可以对 UILabel 的文本颜色变化进行动画处理? [复制]

    这个问题在这里已经有答案了 UIView animateWithDuration 5 animations myLabel textColor UIColor redColor 标签文本颜色立即改变 Try this UIView tran
  • 如何在 iPad 应用程序上禁用横向方向?

    我创建了一个全新的单视图 iOS 通用 Swift 应用程序 然后 我在应用程序设置中取消选中 横向左 和 横向右 我在 iPhone 上运行了它 万岁 无论我如何旋转手机 它都会保持纵向模式 然后我在 iPad 上运行它 它会旋转到任何内
  • 重新组织链式可观察量

    我有一大块链接的 Rx 可观察量 当通过选择表视图行时会触发这些可观察量table rx modelSelected 我希望能够打破这个逻辑 因为我目前必须在flatMapLatest 因为这是流程的 第一步 感觉不对 我必须在后续执行更多

随机推荐

  • 指令链接函数中的scope.$watch没有被调用

    我有这个工厂 factory authentication function return loginRequired false 我有这个控制器 controller TopNavCtrl scope authentication fun
  • 是否可以在 SharePoint 文档库中创建“文件夹链接”?

    是否可以在文档库中创建不同文档库中文件夹的快捷方式 最简单的方法是使用以下模式 http server site ListName Folder SubFolder 要放置文档库的快捷方式 将其上传为 url 文件 但是 默认情况下不允许使
  • Numpy:将一行中的每个元素替换为同一行中其他元素的最大值

    假设我们有一个像这样的二维数组 gt gt gt a array 1 1 2 0 2 2 2 2 0 0 2 0 对于每一行 我想将每个元素替换为同一行中其他两个元素中的最大值 我找到了如何使用 numpy amax 和一个恒等数组分别为每
  • HostGator 不会通过 PHP SwiftMail API 发送邮件

    PHP 版 SwiftMail API 无法在 HostGator 上运行是否有原因 他们的技术支持人员表示 使用 mail 命令 到端口 25 的套接字连接将无法像他们的共享托管计划那样工作 我抱怨说 当你在谷歌上搜索如何使用 mail
  • Spark数据帧中的结构体数组解析

    我有一个带有一个结构类型列的数据框 示例数据框架构是 root Data array nullable true element struct containsNull true name string nullable true valu
  • for循环跳到最后? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我对 Java 相当陌生 但我的 for 循环立即跳到以下代码中的最高可能值 System out println i for i
  • 如何与 Socket.IO 1.x 和 Express 4.x 共享会话?

    如何与 Socket io 1 0 和 Express 4 x 共享会话 我使用 Redis Store 但我相信这应该不重要 我知道我必须使用中间件来查看 cookie 和获取会话 但不知道如何操作 我搜索但找不到任何工作 var Red
  • 检测到重入

    我在设置 Web 浏览器控件的属性时收到 检测到重入 MDA 错误 仅当我调用 SetWindowsHookEx 来挂钩同一线程中的某些拨号盘时 才会发生这种情况 通常 此挂钩代码工作正常 但与 Webbrowser Control 配合使
  • 使用带有 XLSX.js 的 Alasql JavaScript 库导出到 csv 不适用于 Safari。 - Angularjs

    我想在我的应用程序中导出 csv 格式的表数据 我已将 Alasql 库与 XLSX js 一起使用 它适用于所有现代浏览器 Chrome Firefox 但不适用于 Safari None
  • 从 http://xbrl.sec.gov/ 搜索所有埃德加数据

    我需要从 xbrl 站点以 XML 格式或 RSS Feed 形式获取所有 Edgar 搜索数据 这与此链接上的搜索相同http www sec gov edgar searchedgar cik htm http www sec gov
  • svn 无法在文件中设置位置指针

    我遇到了一个 svn 存储库的问题 该存储库到目前为止一直运行良好 我收到错误 svnadmin Can t set position pointer in file repository db revs 0 783 Invalid arg
  • GLSL 片段着色器语法错误

    以下简单的片段着色器代码失败 在日志中留下一条无信息的消息 ERROR 0 1 gl Color syntax error syntax error void main vec4 myOutputColor gl Color gl Frag
  • 如何更改组合框控件中的下拉按钮?

    如何更改下拉按钮ComboBox控件 C Windows 窗体 我有一个自定义按钮 我想在ComboBox而不是默认的下拉按钮 我认为汉斯 帕桑特的解决方案就是这样 从这里 http social msdn microsoft com fo
  • 从 Android Studio 将 Libgdx 游戏导出为可执行 Jar

    好吧 我使用 Libgdx 制作了一个游戏 我打算将它作为一个 Android 应用程序 这就是我使用 Android Studio 的原因 但我想让我没有 Android 手机的朋友尝试一下 该项目已经针对桌面和 Android 设置 因
  • iOS5 中的“应用程序试图以模态方式呈现活动控制器”错误

    我遇到一个错误 导致我的应用程序仅在 iPad 上的 iOS5 下崩溃 当用户点击 uibarbuttonitem 中的项目时 将调用以下代码 void optionSelected NSString option self optionP
  • AppEngine 响应时间差异

    我正在考虑使用 AppEngine 来部署我正在开发的网络应用程序 作为我对 AppEngine 平台调查的一部分 我一直在检查简单请求的响应时间 为此 我编写了一个简单的 PING servlet SuppressWarnings ser
  • R:计算抛硬币的频率

    我正在使用 R 编程语言 我模拟了这个包含 1000 次硬币翻转的数据集 然后我计算了 2 个翻转序列 的数量 Coin lt c H T Results sample Coin 1000 replace TRUE My Data data
  • Node.js 隔离物是什么?为什么他们现在都死了?

    在0 7 0中 实验分离支持 http blog nodejs org 2012 01 16 node v0 7 0 unstable 原文如此 已推出 除了一些模糊的想法之外 我一直不理解这一点 即它们提供了类似线程的功能 但没有线程的问
  • g.i.cs 文件丢失,类不再包含 InitializeComponent 的定义

    我在业余时间开发了一个 UWP 项目 以掌握 UWP MVVM 和 Prism 该项目最初非常经典 没有使用 MVVM 和 Prism 我一直在努力将这两个纳入该项目 我一直依赖着https msdn microsoft com en us
  • 如何在ARKit中使用环境贴图?

    ARKit 2 0 添加了一个名为 AREnvironmentProbeAnchor 的新类 阅读它的说明 似乎 ARKit 可以自动收集环境纹理 立方体贴图 我相信我们现在可以创建一些反映真实环境的虚拟对象 但我仍然不清楚这是如何工作的