ARG*_*Geo 25 augmented-reality swift metal arkit realitykit
我想要capture
一个真实世界的纹理,并将其应用于在激光雷达扫描仪的帮助下生成的 3D 网格。我想应该使用 Projection-View-Model 矩阵。纹理必须从固定的视点制作,例如,从房间的中心。但是,如果我们可以应用environmentTexturing
作为cube-map
场景中的纹理收集的数据,这将是一个理想的解决方案。
看看3D 扫描仪应用程序。这是一个参考应用程序,允许我们导出带有纹理的模型。
我需要通过一次迭代来捕获纹理。我不需要实时更新它。我意识到改变 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)
}
}
Run Code Online (Sandbox Code Playgroud)
ARG*_*Geo 12
遗憾的是,我无法使用 LiDAR 扫描过程实时捕获模型的纹理(在 WWDC21 上,Apple 没有为此发布 API)。然而,有一个好消息——一种新的方法终于出现了。它将允许开发人员从一系列镜头中创建纹理模型。
在 WWDC 2021 上宣布的Object Capture API为开发人员提供了期待已久的photogrammetry
工具。在输出中,我们得到具有相应纹理的 USDZ 模型。要实现,Object Capture API
您需要 Xcode 13、iOS 15 和 macOS 12。
让我分享一些有关如何拍摄高质量照片的技巧:
从技术上讲,iPhone 能够将多个通道存储为视觉数据,并将来自任何 iOS 传感器的数据存储为元数据。换句话说,我们应该实施数字合成技术。我们必须为每个镜头存储以下通道——RGB、Alpha(分割)、深度数据及其置信度、视差等,以及来自数字罗盘的有用数据。深度通道可以来自 LiDAR(其中精确距离以米为单位),或来自两个 RGB 相机(视差通道质量一般)。我们能够将所有这些数据保存在 OpenEXR 文件或 Apple 的双四通道 JPEG 中。深度数据必须是 32 位。
这是一个 Apple示例应用程序,其中实现了捕获方法。
要从一系列捕获的图像创建 USDZ 模型,请使用PhotogrammetrySession
.
下面是一段代码片段,可以说明这个过程:
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])
Run Code Online (Sandbox Code Playgroud)
可以在此示例应用程序中找到允许您从一系列镜头创建 USDZ 模型的完整代码版本。
如何在 Unity 中完成
\n我想分享一些有关Unity AR 基金会与 LiDAR 网格的工作的有趣信息。目前 \xe2\x80\x93 2020 年 11 月 1 日 \xe2\x80\x93 存在一种荒谬的情况。这与原生 ARKit 开发人员无法使用标准高级 RealityKit 工具捕获扫描对象的纹理这一事实相关,但 Unity 的 AR Foundation 用户(创建 ARKit 应用程序)可以使用该脚本来做到这一点ARMeshManager
。我不知道这个脚本是由 AR 基金会团队开发的,还是由一家小型创意初创公司的开发人员开发的(然后随后被购买),但事实仍然如此。
要将 ARKit 网格与 AR Foundation 结合使用,您只需将ARMeshManager组件添加到场景中。正如您在图片中看到的,有Texture Coordinates
、Color
和等功能Mesh Density
。
如果有人有关于如何在 Unity 中配置或编写脚本的更多详细信息,请在此线程中发布。
\n 归档时间: |
|
查看次数: |
6171 次 |
最近记录: |