我可以将 USDZ 转换为实体网格,例如 stl

Sam*_*n T 6 xcode 3d-modelling arkit usdz

我使用 ios 应用程序使用 arkit 创建了一个 usdz 文件,但现在我想将扫描结果转换为实体 3d 模型,例如 stl 或 obj。是否有允许进行这种转换的 ios 或 mac 应用程序。除了 xcode 和预览之外,我找不到任何可以打开它们的应用程序,但都不允许我导出到 3d 模型。

jls*_*ert 6

ModelIO可以,至少在 iOS 中。

import ModelIO

let usdz = URL(fileURLWithPath: "model.usdz")
let asset = MDLAsset(url: usdz)
let stl = URL(fileURLWithPath: "model.stl")
try asset.export(to: stl)
Run Code Online (Sandbox Code Playgroud)

.usdz只是一个.usdc带有纹理的压缩文件(来自官方文档)。如果要在mac上导出文件,请将文件扩展名更改为.zip,解压缩文件并用于ModelIO导出.stl文件。

打开 Xcode,新建一个 Playground,选择 macOS 作为平台。我已经从Apple 的 Quick Look Gallery下载了一个测试文件,并将一个示例解压缩到stratocoaster_usdz/我的 Downlaods 目录中。然后使用以下代码:

import ModelIO

// Get the path to the Downloads directory in your home folder
let directory = FileManager.default.urls(for: .downloadsDirectory, in: .userDomainMask).first!
let usdc = URL(fileURLWithPath: "stratocaster_usdz/Stratocaster.usdc", relativeTo: directory)

// Load the usdc file that was packed in the usdz file
let asset = MDLAsset(url: usdc)

do {
    let target = URL(fileURLWithPath: "stratocaster.stl", relativeTo: directory)
    // Export to .stl
    try asset.export(to: target)
} catch {
    error
}
Run Code Online (Sandbox Code Playgroud)


小智 6

谢谢!正是我要找的。我创建了一个 Mac OS 脚本来在终端中自动执行此操作。我还在 Automator Quick Action 中做了类似的事情,通过右键单击文件从 Finder 运行,但无法找到一种方法将其附加到此处。

#!/usr/bin/env osascript -l JavaScript

// Save to a file, e.g. usdz2stl.js
// chmod +x usdz2stl.js
// usdz2stl.js /path/to/model.usdz

ObjC.import('ModelIO')

function run(argv) {
  var inFile = argv[0];
  var outFile = inFile + ".stl";
  console.log("Converting " + inFile + " ...");
  var usdz = $.NSURL.alloc.initFileURLWithPath(inFile);
  var asset = $.MDLAsset.alloc.initWithURL(usdz);
  var stl = $.NSURL.alloc.initFileURLWithPath(outFile);
  asset.exportAssetToURL(stl);
  console.log("Conversion Complete: " + outFile);
}
Run Code Online (Sandbox Code Playgroud)