From 1e9b11860d88083849fb0ae3f4b47a30746fdf29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 6 Mar 2025 12:05:39 +0100 Subject: [PATCH] AnySceneImporter: recognize USD files. Assimp seems to support those since 5.4.3, so we have a plugin to direct these to. --- doc/changelog.dox | 2 +- src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp | 6 ++++++ src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h | 3 +++ .../AnySceneImporter/Test/AnySceneImporterTest.cpp | 4 ++++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/doc/changelog.dox b/doc/changelog.dox index 71e4903f9..7ce45954a 100644 --- a/doc/changelog.dox +++ b/doc/changelog.dox @@ -967,7 +967,7 @@ See also: in @relativeref{Trade,AnyImageConverter} - Recognizing WebP files in @relativeref{Trade,AnyImageConverter} - Recognizing glTF files in @relativeref{Trade,AnySceneConverter} -- Recognizing 3MF and VRM files in @relativeref{Trade,AnySceneImporter} +- Recognizing 3MF, VRM and USD files in @relativeref{Trade,AnySceneImporter} - Recognizing OpenVBD files in @relativeref{Trade,AnyImageImporter} and @relativeref{Trade,AnyImageConverter} - @ref Audio::AnyImporter "AnyAudioImporter", diff --git a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp index 62c7420e6..6456176e9 100644 --- a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp +++ b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp @@ -166,6 +166,12 @@ void AnySceneImporter::doOpenFile(const Containers::StringView filename) { /** @todo isn't *.scn also too generic? */ normalized.hasSuffix(".scn"_s)) plugin = "TrueSpaceImporter"_s; + /* https://en.wikipedia.org/wiki/Universal_Scene_Description */ + else if(normalized.hasSuffix(".usd"_s) || + normalized.hasSuffix(".usda"_s) || + normalized.hasSuffix(".usdc"_s) || + normalized.hasSuffix(".usdz"_s)) + plugin = "UsdImporter"_s; else if(normalized.hasSuffix(".3d"_s)) plugin = "UnrealImporter"_s; else if(normalized.hasSuffix(".smd"_s) || diff --git a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h index 739dd7988..3c738b922 100644 --- a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h +++ b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h @@ -96,6 +96,9 @@ tries to open the file with it. Supported formats: `StlImporter` - TrueSpace (`*.cob`, `*.scn`), loaded with any plugin that provides `TrueSpaceImporter` +- [Universal Scene Description (USD)](https://en.wikipedia.org/wiki/Universal_Scene_Description) + (`*.usd`, `*.usda`, `*.usdc`, `*.usdz`), loaded with any plugin that + provides `UsdImporter` - Unreal (`*.3d`), loaded with any plugin that provides `UnrealImporter` - Valve Model (`*.smd`, `*.vta`), loaded with any plugin that provides `ValveImporter` diff --git a/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp b/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp index 50fd26d9f..dafe60bf9 100644 --- a/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp +++ b/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp @@ -153,6 +153,10 @@ const struct { {"STL", "robot.stl", "StlImporter"}, {"TrueSpace COB", "huh.cob", "TrueSpaceImporter"}, {"TrueSpace SCN", "huh.scn", "TrueSpaceImporter"}, + {"USD", "model.usd", "UsdImporter"}, + {"USD ASCII", "model.usda", "UsdImporter"}, + {"USD binary", "model.usdc", "UsdImporter"}, + {"USD zipped", "model.usdz", "UsdImporter"}, {"Unreal", "tournament.3d", "UnrealImporter"}, {"Valve Model SMD", "hl3.smd", "ValveImporter"}, {"Valve Model VTA", "hl3.vta", "ValveImporter"},