Three.js: 添加对 USD 和 USDZ 格式的支持

创建于 2018-06-05  ·  22评论  ·  资料来源: mrdoob/three.js

获得 Three.js 对通用场景描述 (USD) 文件格式和今天在 WWDC 上宣布的即将推出的 USDZ 格式的支持会很棒。

USDZ 规范文档: https ://graphics.pixar.com/usd/files/USDZFileFormatSpecification.pdf(我认为此格式的更多详细信息将在未来几个月内发布)

Enhancement Loaders

最有用的评论

如此一来,Apple 就可以继续声称自己是高端奢侈品的选择,拥有仅适用于其平台的独家 3D 格式……

我愿意在这里给出更多的疑问——他们对“运行时”格式的目标与我们(threejs + web devs)不同,因此能够做出不同的选择。 特别是,将 ~15MB USD 运行时捆绑到 iOS 中意味着他们不在乎加载 USDZ _而没有_本地运行时是非常困难的,而且他们似乎可以不向 Web 应用程序提供对模型的任何访问权限,而只是打开而是在本机应用程序中按原样建模。

在“高端奢侈品”上,苹果的iOS QuickLook查看器支持金属/粗糙度PBR材质,材质模型大致相当于glTF 2.0现在支持的材质。 未来为 glTF 2.0 计划并在https://github.com/mrdoob/three.js/issues/16977 中描述的附加材料功能将超出 Apple 的 USDZ 查看器现在支持的范围。

我提到“Apple 的 USDZ 观众”,因为事实上,这就是人们对 USDZ 的理解。 但从技术上讲,USDZ 格式只是一个压缩的 USD 文件,可以包含从普通材质模型到完全自定义着色器的几乎所有内容。 Apple 的查看器支持 USD 的一小部分,该子集没有明确定义,但您可能会找到的最佳摘要如下: https :

在渲染保真度方面,我会指出model-viewer使用threejs显示glTF模型,并提供在iOS Quick Look中打开USDZ版本的方法,视觉效果非常相似。 此页面提供了一些直接比较,但不幸的是它现在已关闭。

无论如何,如果不是为了颠覆苹果在这里的邪恶目标,我认为我们需要在某个时候支持 USDZ。

参见https://github.com/mrdoob/three.js/issues/14219#issuecomment -395107896。

所有22条评论

这是一个有效的功能请求,但我个人不了解 Apple/Pixar。 为什么他们要引入一种新的文件格式,而不仅仅是使用glTF ? 有人可以解释一下USD / USDZglTF更好的地方吗?

美元文档: http :

这是一个有效的功能请求,但我个人不了解 Apple/Pixar。 为什么他们要引入一种新的文件格式,而不仅仅是使用 glTF? 有人可以解释一下 USD/USDZ 比 glTF 更好的地方吗?

我同意,其中一部分是我认为的政治。 但是,这是一个单独的讨论:)

USD 已经存在了几年——它通常用于电影,而不是运行时传输的明显选择。 据我所知,USDZ 是一个包装器。 苹果目前没有提供太多细节。 也许他们有一些计划使其更适合运行时,或者 WWDC 的消息传递对于他们实际使用它的方式还不清楚。 无论如何,我认为我们可能需要等待更多信息。

如果有人有兴趣贡献THREE.USDZLoader ,那么无论如何。 🙂 但是到目前为止我发现的所有文档都表明该格式与用于解析它的官方(C++/Python)库密切相关,类似于 FBX 和 FBX SDK。 因此,除非可以使用 WASM 使它们对 Web 友好,否则在 Three.js 中实现 USDZ 支持并随着时间的推移跟上格式的变化看起来是一个非常耗时的过程,而没有这些库的好处。

出于好奇,我尝试从https://developer.apple.com/arkit/gallery/打开“复古电视”文件,就好像它是一个简单的 zip 文件一样。 我通过将 .usdz 的扩展名重命名为 .zip 来“取消归档”它,然后让我的操作系统执行其通常的打开过程。 据推测,可以使用https://gildas-lormeau.github.io/zip.js/实现类似的功能

这是我在“取消归档”usdz 时看到的内容:

screen shot 2018-07-04 at 2 17 46 pm

因此,纹理只是 PNG,它们可能是从 .usdc 中引用的,这是下一期。 根据https://graphics.pixar.com/usd/docs/Converting-Between-Layer-Formats.html ,Crate 中的“.usdc 文件 – 二进制格式”(参见 https://graphics.crate 中的 _Crate 文件格式)。 pixar.com/usd/docs/USD-Glossary.html) 格式。

还有 .usda,它是 ASCII 编码的,大概可以更容易地编写加载程序。

作为对此的一些待办事项的粗略概述,加载程序至少会考虑在 JS 中提取 Zip 文件,然后还了解 .usda(以及潜在的二进制 Crate .usdc)。

@richardmonette ,我对USDZ 和USDA 格式进行了一些研究,并编写了一个概念验证glTF 到USDZ 转换器。 也许它对您的研究有用: https : https : https :

简而言之:几何被转换为OBJ ,金属粗糙度纹理被通道分割,纹理被 Y 翻转。 从这里动态构建USDA文件并将其输入 usdz_converter 以构建最终的usdz

我知道有些人正在考虑编写一个直接转换为 USDZ 的转换器,但此时对USDC格式的了解并不多(在解码方面也是如此)。

@TimvanScherpenzeel ,感谢您的留言并为此努力!

您是否考虑过使用 USD Python API(https://graphics.pixar.com/usd/docs/Hello-World---Creating-Your-First-USD-Stage.html)? 我想知道是否有可能跳过 .obj 阶段并使用 Python 读取 glTF 并直接进入 .usda/c ?

我在设置 USD 时遇到了很多问题,还没有花时间解决这个问题(我认为这与安装了多个版本的 Python 以及在编译期间链接到错误的 Python 有关系)。

您确实可以将 OBJ 文件直接写入 USDA 文件(这实际上可能是我的概念验证的下一步)。 我知道 AR Gallery 示例的文件结构,因为我的项目的贡献者在使用usdcat对 USDC 文件进行解码后向我发送了 USDA 文件。

Apple 提供USDZ QuickLook 的全部目的是完全绕过使用 WebGL、DOM 和 Javascript,直接使用 ARkit2.0 的场景。
这只是基于 Apple/Pixar 技术的 rOS 的一个里程碑。
当他们稍后添加交互性/脚本性时,将需要更少的 Web-UI。

Pixar USD 使用高效的 OpenSubDiv 几何补丁,移植到移动 Metal 将很快超越高端 PC-VR WebVR。
不是作为一种文件格式,而是作为一个整体的体验制作/呈现/(-交互)管道。

因此,恕我直言,从 AR/VR 编辑器以及 Android 和 Windows 导出USDZ以赶上美元列车比向WebGL2管道添加导入器更重要。

一个重要的问题是,WebXR 还必须支持 SubDiv 补丁而不是传统的多边形网格,以完全支持 Apple 使用的 USD。

@pixelpartner你有点失去了我。

在我看来,除非在浏览器中内置加载器,否则在 JavaScript 中构建加载器会很有帮助。

我确信快速查看是高度优化的,但是在浏览器中使用 USDZ 资产创建交互式内容的前进道路是什么?

这是一个有效的功能请求,但我个人不了解 Apple/Pixar。 为什么他们要引入一种新的文件格式,而不仅仅是使用 glTF? 有人可以解释一下 USD / USDZ 比 glTF 更好的地方吗?

我最近和一个做产品展示软件的人聊天,他们出口到 glTF 和 USDZ,所以我问他对此有何看法。 简而言之:这样一来,Apple 就可以继续声称自己是高端奢侈品的选择,其独有的 3D 格式只能通过 ARKit2.0/SceneKit 在他们的平台上运行。 采用标准的 glTF 格式将与他们的目标背道而驰,他们希望能够声称 _their_ 格式更好,并且由于 glTF 不(还?)支持的 PBR 材料属性,允许获得更高质量的结果。

可能需要 16977 和 #14051,才能使 Three.js 达到与 Apple 产品相同的渲染标准,但我不确定 glTF 的当前状态或未来计划与此有何关系。

无论如何,如果不是为了颠覆苹果在这里的邪恶目标,我认为我们需要在某个时候支持 USDZ。

如此一来,Apple 就可以继续声称自己是高端奢侈品的选择,拥有仅适用于其平台的独家 3D 格式……

我愿意在这里给出更多的疑问——他们对“运行时”格式的目标与我们(threejs + web devs)不同,因此能够做出不同的选择。 特别是,将 ~15MB USD 运行时捆绑到 iOS 中意味着他们不在乎加载 USDZ _而没有_本地运行时是非常困难的,而且他们似乎可以不向 Web 应用程序提供对模型的任何访问权限,而只是打开而是在本机应用程序中按原样建模。

在“高端奢侈品”上,苹果的iOS QuickLook查看器支持金属/粗糙度PBR材质,材质模型大致相当于glTF 2.0现在支持的材质。 未来为 glTF 2.0 计划并在https://github.com/mrdoob/three.js/issues/16977 中描述的附加材料功能将超出 Apple 的 USDZ 查看器现在支持的范围。

我提到“Apple 的 USDZ 观众”,因为事实上,这就是人们对 USDZ 的理解。 但从技术上讲,USDZ 格式只是一个压缩的 USD 文件,可以包含从普通材质模型到完全自定义着色器的几乎所有内容。 Apple 的查看器支持 USD 的一小部分,该子集没有明确定义,但您可能会找到的最佳摘要如下: https :

在渲染保真度方面,我会指出model-viewer使用threejs显示glTF模型,并提供在iOS Quick Look中打开USDZ版本的方法,视觉效果非常相似。 此页面提供了一些直接比较,但不幸的是它现在已关闭。

无论如何,如果不是为了颠覆苹果在这里的邪恶目标,我认为我们需要在某个时候支持 USDZ。

参见https://github.com/mrdoob/three.js/issues/14219#issuecomment -395107896。

我只想在这里提一下,除了苹果“自称是奢侈品的选择”之外,还有其他理由支持美元。 @Mugen87问“有人能解释一下 USD/USDZ 比 glTF 更好的地方吗?”
我关心的几件事:

  • HDR/浮动纹理
  • 环境贴图 (UsdLuxDomeLight)
  • 区域和球体光(UsdLuxRectLight 等)
  • 着色器材质 (OSL/MDL) 与 WebGL 的“预览表面”

我的用例是将相同的场景描述加载到 WebGL 和高端渲染管道中 - 理解外观当然会有所不同,并且会进行一些替换。

@garyo灯光和环境由 AR 查看器处理,以尝试模拟实际环境。
该视频让您了解它们支持哪些贴图(反照率、金属、粗糙度、法线、环境光遮蔽、自发光)
https://developer.apple.com/videos/play/wwdc2018/603/

我希望看到的是来自three.js 的USDA 导出器,因此您可以保存在三个项目中创建/配置的模型,以便在AR 中查看。
“model-view”包括一个标签,用于指定 USDZ 模型替代品,用于在 iOS 上查看时。
https://modelviewer.dev/

苹果采用了一种没有人使用的格式,并且在任何地方都不受本机支持(测试版导出器可用于 Blender),这真的很遗憾。 因此,您别无选择,只能手动转换所有现有模型。 如果您在整个模型范围内使用相同的纹理,则必须包含纹理的事实也很痛苦。 他们肯定可以有外部参考吗?
它真的有点像大杂烩格式,它只利用 Pixar 规范中的几何图形和映射,并将它们与您的图像文件压缩在一起。
glTF/glb 会好得多,我们只需要一个模型来处理任何地方......
在电子商务领域,这是他们的目标,没有客户会想要只适用于 iOS 的网络体验。 像往常一样,我们将不得不做所有的猴子工作和维护。

@garyo

我的用例是将相同的场景描述加载到 WebGL 和高端渲染管道中

等等,有没有办法在 webgl 中加载 usd(z)?

USDZ 的功能集最近随着 iOS 13.4(和 RealityComposer 1.4 (133+))急剧增加

Apple 添加了许多目前没有其他软件可以解释并且可能会忽略的美元方案。
RealityComposer 几乎所有的交互功能现在不仅可以保存到 .reality 场景文件中,还可以以这种新的美元风格导出。
我头顶的一些新的美元功能:
触发边界,点击或输入区域
分组动画动作,按顺序和/或并行
Text Geometrie 是由一种采用字符串、字体和大小的新型 Prim 动态创建的

这开启了一个新时代。 现在,任何开发人员都可以在任何平台上使用 Pixar 使用工具和库(C++/python 2.6/python 3.x)来编写可以简单显示内容或创建交互式体验的 USD 文件。
显然,您仍然需要一个 iDevice 进行测试。

——
最好的祝福,(刚刚结束隔离,留在家庭办公室)
兴奋的托马斯

上午 14.04.2020 嗯 20:25 schrieb theightyatom [email protected]
@garyo https://github.com/garyo灯光和环境由 AR 查看器处理,以尝试模拟实际环境。
该视频让您了解它们支持哪些贴图(反照率、金属、粗糙度、法线、环境光遮蔽、自发光)
https://developer.apple.com/videos/play/wwdc2018/603/ https://developer.apple.com/videos/play/wwdc2018/603/
我希望看到的是来自three.js 的USDA 导出器,因此您可以保存在三个项目中创建/配置的模型,以便在AR 中查看。
包括用于指定 USDZ 模型替代品的标签,用于在 iOS 上查看时。
https://modelviewer.dev/ https://modelviewer.dev/
苹果采用了一种没有人使用的格式,并且在任何地方都不受本机支持(测试版导出器可用于 Blender),这真的很遗憾。 因此,您别无选择,只能手动转换所有现有模型。 如果您在整个模型范围内使用相同的纹理,则必须包含纹理的事实也很痛苦。 他们肯定可以有外部参考吗?
它真的有点像大杂烩格式,它只利用 Pixar 规范中的几何图形和映射,并将它们与您的图像文件压缩在一起。
glTF/glb 会好得多,我们只需要一个模型来处理任何地方......


你收到这个是因为你被提到了。
直接回复本邮件,在 GitHub 上查看https://github.com/mrdoob/three.js/issues/14219#issuecomment-613604756 ,或者退订https://github.com/notifications/unsubscribe-auth/AAAR6X5SXAY32JAPYL5V44TRMSTBTANCWQSM4

我不知道有任何适用于 USD 或 USDZ 的网络兼容解析器。 在 WebGL 或其他 API 中渲染不是问题,它解析的是复杂的文件内容——该任务最好由官方 USD 运行时处理,它具有包括 OpenSubdiv 和 MaterialX 在内的依赖项。

任何开发人员现在都可以在任何平台上使用 Pixar 使用工具和库(C++/python 2.6/python 3.x)来编写 USD 文件。

能够在任何平台上读取美元文件会很好。 🙂 出于技术原因,我认为现在不太可能实现功能性的three.js。 如果有人有空闲时间,我的建议是致力于实现 OpenSubdiv(带 WASM?)或 MaterialX(带 THREE.NodeMaterial?),因为即使没有 USD 解析器,它们本身也很有用.

@garyo

我的用例是将相同的场景描述加载到 WebGL 和高端渲染管道中

等等,有没有办法在 webgl 中加载 usd(z)?

不,这就是我要找的。 我有场景(对象、灯光、材质、相机、动画等 - 整个事情),我希望能够以任何格式将相同的场景加载到 WebGL(通过three.js)中进行预览,等等像用于最终渲染的 Blender。 glTF 是我目前最好的选择,但它不支持我上面提到的东西(区域灯等)。我知道 glTF 的人不愿意添加更多功能,因为他们的目标是设备的最后一英里而不是真实场景转移。
只是在寻找选项。

@garyo听起来像 Collada 可能符合要求? 我使用来自three.js 的collada 导出器的编辑版本将资产带入Blender 进行渲染。

@themightyatom几年前我研究过Godot的论点、没有 PBR 支持等说服了——这可能已经改变了。)

@garyo Collada 旨在在所有在不同平台上工作的游戏开发人员之间转移资产。 这不是一种可行的交付格式,但它很好地完成了它的意义:)
我有幸与其中一位创作者 Rene Arnaud 在意大利度过了一周。 它是“从 GPU 的角度”编写的,通常是第一种支持规范更改的格式。 (OpenGL、DirectX 等)。

我认为将https://github.com/google/usd_from_gltf集成为出口商是非常有价值的。 能够开立美元对我来说并不重要。

要对 USDZ 执行任何有用的操作(加载或导出),您将需要 USD SDK。 来自 glTF_ 的 _USD 需要 USD SDK 作为依赖项,但该 SDK 在 web 上不受支持。 Apple 通过离开 Web 浏览器并带您进入他们的原生 AR Quick Look 应用程序来解决这个问题,但这通常不是 Web 的解决方案。

此页面是否有帮助?
0 / 5 - 0 等级