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

Can I convert a USDZ to solid mesh such as stl

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

ModelIO can,至少在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)

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

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

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
}

谢谢!正是我要找的。 我创建了一个 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);
}

直接打开XCODE

中的.USDZ或USDC文件即可

如果您解压了 .zip,您将保留一个 .USDC 文件和一个名为“0”的文件夹,其中包含 .PNG 中的所有纹理、材料和 alpha。

一旦在 XCODE>> 文件 >> 导出

中打开 .USDZ 或 .USDC

您可以直接选择主要的 .OBJ .STL 格式和许多其他格式