如何使用 Xcode 转换器创建 USDZ 文件?

Posted

技术标签:

【中文标题】如何使用 Xcode 转换器创建 USDZ 文件?【英文标题】:How to create USDZ file using Xcode converter? 【发布时间】:2018-11-23 14:10:06 【问题描述】:

在 2018 WWDC Apple announced 推出新的 USDZ 文件格式。

关于创建 USDZ 文件的内容如下:

为了创建您自己的 usdz 文件,一个 usdz_converter 已作为 Xcode 10 beta 的一部分捆绑在一起。它是一个命令行工具,用于从 OBJ 文件、单帧 Alembic (ABC) 文件、USD 文件(.usda 或 usd.c)创建 usdz 文件

基本的命令行是

xcrun usdz_converter myFile.obj myFile.usdz

我已安装 Xcode 10 测试版,但无法运行,甚至无法在 2018 年 6 月 4 日提供的 Xcode 10 测试版包(内部版本 10L176w)中找到 usdz_converter。

注意:我还在 macOS highSierra 上运行,我还没有安装 macOS Mojave 10.14 beta……但我认为这不是原因。

还有其他人能够让这个 xcrun usdz_converter 工作吗?

如果是,请分享步骤。

【问题讨论】:

运行该命令会得到什么?我没有要尝试转换的文件,但是当我运行命令时,它会打印出使用说明,因此它至少在那里。 xcrun:错误:无法找到实用程序“usdz_converter”,不是开发人员工具或路径中 确保 xcrun 正在寻找正确的位置,方法是使用 xcode-select 将活动开发者目录设置为 Xcode-beta.app 中的目录,或者将其提供到 usdz_converter 的完整路径 好的,我有几个 Xcode 版本……所以现在就来看看。谢谢 xcode-select -p /Applications/Xcode.app/Contents/Developer 应该是 /Applications/Xcode-beta 10.app/Contents/Developer - 谢谢 【参考方案1】:

更新日期:2021 年 12 月 20 日

Xcode 13、12、11 中的usdzconvert 命令

ma​​cOS MontereyBig SurCatalina USDZ converter 拥有丰富的命令集,并且支持比之前版本更多的输入格式进行转换。但在使用之前您需要下载USDZ Tools。并且不要忘记为 Python usdz 工具设置一个全局变量终端中的新命令如下所示:

usdzconvert ~/Desktop/file.gltf -diffuseColor albedo.png -metallic brass.jpg
在 macOS Monterey、Big Sur 和 Catalina 中,默认的命令 shell 是 ZSH

创建外壳资源文件

如果你想使用USDPython工具你需要创建一个Shell资源文件.zshrc

为此,在终端中使用change directory 命令转到主页区域:

cd /Users/<UserName>

使用parent working directory 命令检查你是否在那里:

pwd

然后输入ls 指令listing 的目录内容包括隐藏文件:

ls -a

现在您可以创建一个隐藏的.zshrc 文件了:

touch ~/.zshrc

使用以下命令打开此文件:

open ~/.zshrc

现在您可以将这些行添加到 zsh 资源文件中:

export PATH="/Users/yourUserName/usdpython/USD:$PATH"
export PATH="/Users/yourUserName/usdpython/usdzconvert:$PATH"
export PYTHONPATH="/Users/yourUserName/usdpython/USD/lib/python:$PYTHONPATH"

echo "Now I can use USDPython commands here."

保存并重启终端。

usdzconvert 是一个 Python 脚本,可将以下资产转换为 usdz

对象 gltf fbx abc 美国农业部 美元 美元

如需使用FBX格式转换需下载安装FBX Python SDK。

然后在.zshrc文件中再添加一行:

export PYTHONPATH="/Applications/Autodesk/FBXPythonSDK/2020.0.1/lib/Python27_ub:$PYTHONPATH"

保存.zshrc 文件并重启终端。

这是您可以在终端中看到的完整选项列表,请输入 usdzconvert -h

# DON'T USE usdzconvert 0.63 BECAUSE IT CAUSES ERRORS.

# USE usdzconvert 0.64
# or
# USE usdzconvert 0.62

outputFile                           Output .usd/usda/usdc/usdz files.
-h, --help                           Show this help message and exit.
-f <file>                            Read arguments from <file>
-v                                   Verbose output.
-url <url>                           Add URL metadata
-copyright "copyright message"       Add copyright metadata
-copytextures                        Copy texture files (for .usd/usda/usdc) workflows
-metersPerUnit value                 Set metersPerUnit attribute with float value
-loop                                Set animation loop flag to 1
-no-loop                             Set animation loop flag to 0
-m materialName                      Subsequent material arguments apply to this material.
-ios12                               Make output file compatible with iOS 12 frameworks
-texCoordSet name                    The name of the texture coordinates to use for current material.
                        
-diffuseColor r,g,b                  Set diffuseColor to constant color r,g,b with values in the range [0 .. 1]
-diffuseColor <file> fr,fg,fb        Use <file> as texture for diffuseColor.
                                     fr,fg,fb: (optional) constant fallback color, with values in the range [0..1].
                        
-normal x,y,z                        Set normal to constant value x,y,z in tangent space [(-1, -1, -1), (1, 1, 1)].
-normal <file> fx,fy,fz              Use <file> as texture for normal.
                                     fx,fy,fz: (optional) constant fallback value, with values in the range [-1..1].
                        
-emissiveColor r,g,b                 Set emissiveColor to constant color r,g,b with values in the range [0..1]
-emissiveColor <file> fr,fg,fb       Use <file> as texture for emissiveColor.
                                     fr,fg,fb: (optional) constant fallback color, with values in the range [0..1].
                        
-metallic c                          Set metallic to constant c, in the range [0..1]
-metallic ch <file> fc               Use <file> as texture for metallic.
                                     ch: (optional) texture color channel (r, g, b or a).
                                     fc: (optional) fallback constant in the range [0..1]
                        
-roughness c                         Set roughness to constant c, in the range [0..1]
-roughness ch <file> fc              Use <file> as texture for roughness.
                                     ch: (optional) texture color channel (r, g, b or a).
                                     fc: (optional) fallback constant in the range [0..1]
                        
-occlusion c                         Set occlusion to constant c, in the range [0..1]
-occlusion ch <file> fc              Use <file> as texture for occlusion.
                                     ch: (optional) texture color channel (r, g, b or a).
                                     fc: (optional) fallback constant in the range [0..1]
                        
-opacity c                           Set opacity to constant c, in the range [0..1]
-opacity ch <file> fc                Use <file> as texture for opacity.
                                     ch: (optional) texture color channel (r, g, b or a).
                                     fc: (optional) fallback constant in the range [0..1]

-clearcoat c                         Set clearcoat to constant c, in the range [0..1]
-clearcoat ch <file> fc              Use <file> as texture for clearcoat.
                                     ch: (optional) texture color channel (r, g, b or a).
                                     fc: (optional) fallback constant in the range [0..1]

-clearcoatRoughness c                Set clearcoat roughness to constant c, in the range [0..1]
-clearcoatRoughness ch <file> fc     Use <file> as texture for clearcoat roughness.
                                     ch: (optional) texture color channel (r, g, b or a).
                                     fc: (optional) fallback constant in the range [0..1]

或者,您可以使用 Reality Converter 应用程序 (GUI),而不是使用命令行转换工具 (CLI)。新应用程序可以轻松地在 Mac 上转换、查看和自定义 .usdz 对象。只需拖放常见的 3D 文件格式,例如 .obj.gltf.usd,即可查看转换后的 .usdz 结果,使用自己的纹理自定义材质属性,并编辑文件元数据。您甚至可以使用内置 IBL 选项在各种光照和环境条件下预览您的 .usdz 对象。

Reality Composer 中的USDZ Export 命令

Reality Composer for Xcode 13/12 中,您可以直接从 Reality 导出 usdz 模型作曲家的用户界面。为此,您只需在 RealityComposer - Preferences 菜单中激活 USDZ 导出。

您还可以使用 AR USD Schemas,当然还有 Autodesk Maya 2022 工作流程。

从 SceneKit 的场景创建 USDZ 文件

获取 USDZ 文件的另一个好方法是使用 write(to:options:delegate:progressHandler:) 实例方法从 SCNScene 创建它。

我们看一下代码:

import ARKit

class ViewController: UIViewController 

    @IBOutlet var sceneView: ARSCNView!
    let scene = SCNScene(named: "art.scnassets/ship.scn")!
    
    override func viewDidLoad() 
        super.viewDidLoad()
        
        sceneView.scene = scene
        
        let path = FileManager.default.urls(for: .documentDirectory,
                                             in: .userDomainMask)[0]
                                   .appendingPathComponent("model.usdz")
        
        scene.write(to: path, options: nil, 
              delegate: nil, progressHandler: nil)
        
        print(path)
    

Xcode 10 中的xcrun usdz_converter 命令

ma​​cOS Mojave 10.14Xcode 10 中,USDZ converter 的参数和标志集略有不同.以下是旧命令在 Terminal 中的样子:

xcrun usdz_converter file.obj file.usdz -color_map color.jpg -ao_map ao.png
在 macOS Mojave 中,默认的命令 shell 是 BASH

这是您可以在终端中看到的完整选项列表,请输入 xcrun usdz_converter -h

-g groupName [groupNames ...]        Apply subsequent material properties to the named group(s).
-m materialName [materialNames ...]  Apply subsequent material properties to the named material(s).
-h                                   Display help.
-a                                   Generate a .usda intermediate file.  Default is .usdc.
-l                                   Leave the intermediate .usd file in the source folder.
-v                                   Verbose output.
-f                    filePath       Read commands from a file.
-texCoordSet          set            The name of the texturemap coordinate set to use if multiple exist (no quotes).
-opacity              o              Floating point value 0.0...1.0

-color_default        r g b a        Floating point values 0.0...1.0
-normal_default       r g b a        Floating point values 0.0...1.0
-emissive_default     r g b a        Floating point values 0.0...1.0
-metallic_default     r g b a        Floating point values 0.0...1.0
-roughness_default    r g b a        Floating point values 0.0...1.0
-ao_default           r g b a        Floating point values 0.0...1.0

-color_map            filePath
-normal_map           filePath
-emissive_map         filePath
-metallic_map         filePath
-roughness_map        filePath
-ao_map               filePath

【讨论】:

您对只使用 Python 工具而不使用 XCode 有什么建议吗? 我被困在Error: failed to import pxr module. Please add path to USD Python bindings to your PYTHONPATH ...解决此问题的最佳方法是什么? 嗨@ChrisB!我将库重命名为 usdpython 并将其放在 Mac 的 Home 目录中。可以看到,路径如下:/Users/&lt;UserName&gt;/usdpython/. 感谢@AndyJazz,快速解答!我已将文件夹usdpython 移动到我的~ 文件夹,并根据上述说明将.zshrc 路径调整为:export PATH="/Users/myuser/usdpython/USD:$PATH" export PATH="/Users/myuser/usdpython/usdzconvert:$PATH" export PYTHONPATH="/Users/myuser/usdpython/USD/lib/python:$PYTHONPATH" 重新启动机器但仍然出现错误。自述文件说它是 usdzconvert 版本 0.64。我还能尝试什么? 我找到了解决办法:你需要在Rosetta模式下打开终端。然后就可以了。【参考方案2】:

您必须在 Xcode > Preferences > Locations

上启用 Xcode 10 命令行工具

【讨论】:

我需要从使用 v. 9 命令行工具更改为使用 10 beta cmd 行工具【参考方案3】:

您必须在 Xcode 首选项中激活命令行工具,以防它们尚未激活(这是我的情况)。请参阅此主题:

How to create a USDZ file?

【讨论】:

以上是关于如何使用 Xcode 转换器创建 USDZ 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用纹理将 fbx 转换为 usdz

从 USDZ 文件到 glTF 文件的转换

如何添加/乘以 USDZ 格式的纹理?

XCode:使用命令行工具,如何从文件夹创建 git 并将其导入项目

从搅拌机导出的 USDZ 模型损坏

USDZ 模型在 SceneKit 中有孔,但在 QuickLook 中没有