gpt4 book ai didi

swift - LiDAR 和 RealityKit – 为扫描模型捕捉真实世界的纹理

转载 作者:行者123 更新时间:2023-12-03 07:36:44 32 4
gpt4 key购买 nike

任务
我要 capture 真实世界的纹理,并将其应用到在激光雷达扫描仪的帮助下生成的 3D 网格。我想应该使用 Projection-View-Model 矩阵。纹理必须从固定的视点制作,例如,从房间的中心。但是,如果我们可以应用 environmentTexturing 将是一个理想的解决方案。数据,收集为 cube-map场景中的纹理。
enter image description here
3D Scanner App .这是一个引用应用程序,允许我们导出带有纹理的模型。
我需要通过一次迭代来捕获纹理。我不需要实时更新它。我意识到改变 PoV 会导致错误的纹理感知,换句话说,纹理失真。我也意识到 RealityKit 中有一个动态分割,并且有一个自动纹理 mipmapping(纹理的分辨率取决于它捕获的距离)。

import RealityKit
import ARKit
import MetalKit
import ModelIO

class ViewController: UIViewController, ARSessionDelegate {

@IBOutlet var arView: ARView!

override func viewDidLoad() {
super.viewDidLoad()

arView.session.delegate = self
arView.debugOptions.insert(.showSceneUnderstanding)

let config = ARWorldTrackingConfiguration()
config.sceneReconstruction = .mesh
config.environmentTexturing = .manual
arView.session.run(config)
}
}

  • 如何为重建的 3D 网格捕获和应用真实世界的纹理?
  • 最佳答案

    遗憾的是,我无法使用 LiDAR 扫描过程实时捕获模型的纹理(在 WWDC21 上,Apple 没有为此发布 API)。然而,有一个好消息——一种新的方法终于出现了。它将允许开发人员从一系列镜头中创建纹理模型。
    摄影测量
    enter image description here
    Object Capture API ,在 WWDC 2021 上宣布,为开发者提供期待已久的 photogrammetry工具。在输出中,我们得到具有相应纹理的 USDZ 模型。实现 Object Capture API您需要 Xcode 13、iOS 15 和 macOS 12。

    让我分享一些关于如何拍摄高质量照片的技巧 :

  • 光照条件要合适
  • 使用柔和(不刺眼)阴影的柔光
  • 相邻图像必须有 75% 的重叠
  • 不要使用自动对焦
  • 最好使用带有 RGB + 深度 channel 的图像
  • 最好有重力数据的图片
  • 更高分辨率和 RAW 图像更可取
  • 请勿捕捉移动物体
  • 请勿捕捉反射或折射物体
  • 不要捕捉带有镜面高光的物体

  • 从技术上讲,iPhone 能够将多个 channel 存储为视觉数据,并将来自任何 iOS 传感器的数据存储为元数据。换句话说,我们应该实现数字合成技术。我们必须为每个镜头存储以下 channel ——RGB、Alpha(分割)、深度数据及其置信度、视差等,以及来自数字罗盘的有用数据。深度 channel 可以来自 LiDAR(其中精确距离以米为单位),或来自两个 RGB 相机(视差 channel 质量一般)。我们能够将所有这些数据保存在 OpenEXR 文件或 Apple 的双四 channel JPEG 中。深度数据必须是 32 位。
    这是一个苹果 sample app在那里实现了捕获方法。

    要从一系列捕获的图像创建 USDZ 模型,请使用 PhotogrammetrySession 将这些图像提交给 RealityKit。 .
    下面是一段代码片段,可以说明这个过程:
    import RealityKit
    import Combine

    let pathToImages = URL(fileURLWithPath: "/path/to/my/images/")

    let url = URL(fileURLWithPath: "model.usdz")

    var request = PhotogrammetrySession.Request.modelFile(url: url,
    detail: .medium)

    var configuration = PhotogrammetrySession.Configuration()
    configuration.sampleOverlap = .normal
    configuration.sampleOrdering = .unordered
    configuration.featureSensitivity = .normal
    configuration.isObjectMaskingEnabled = false

    guard let session = try PhotogrammetrySession(input: pathToImages,
    configuration: configuration)
    else { return 
}

    var subscriptions = Set<AnyCancellable>()

    session.output.receive(on: DispatchQueue.global())
    .sink(receiveCompletion: { _ in
    // errors
    }, receiveValue: { _ in
    // output
    })
    .store(in: &subscriptions)

    session.process(requests: [request])
    可以在此 sample app 中找到允许您从一系列镜头中创建 USDZ 模型的完整代码版本。 .

    关于swift - LiDAR 和 RealityKit – 为扫描模型捕捉真实世界的纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63793918/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com