USD from glTF für Augmented Reality im Web

Dieser Artikel erfordert mehr Erfahrung im Umgang mit 3D im Internet und ist daher nur für fortgeschrittene Benutzer gedacht.

USD from glTF

Dieses Tutorial beschreibt wie man USD from glTF integriert.

Dieses Tutorial ist als praktischer Leitfaden gedacht und behandelt keine theoretischen Hintergründe. Diese werden in einer Vielzahl von anderen Dokumenten im Internet behandelt.

Für die Richtigkeit der Inhalte dieses Tutorials gebe ich keinerlei Garantie. Der hier gezeigte Weg ist nicht der einzige um ein solches System aufzusetzen, es ist lediglich, der, den ich bevorzuge.

Was ist USD from glTF?

Bibliothek, Befehlszeilen-Tool und Import-Plugin zum Konvertieren von glTF-Modellen nach USD formatierte Assets zur Anzeige in AR Quick Look.

Bitte beachten Sie, dass es sich hierbei nicht um ein offiziell unterstütztes R23-Produkt handelt.

Dies ist eine C++ native Bibliothek, die als Alternative zu bestehenden skriptbasierten Lösungen dient. Seine Hauptvorteile sind die verbesserte Kompatibilität mit iOS und die Konvertierungsgeschwindigkeit. Es behandelt USDZ nicht als Austauschformat, sondern als Übertragungsformat. Weitere Informationen über Übertragungs- und Austauschdateiformate finden Sie hier.

Installieren Sie es, dann konvertieren Sie mit: usd_from_gltf <source.gltf> <destination.usdz>

Hintergrund

glTF ist ein Übertragungsformat für 3D-Assets, das sich gut für das Web und mobile Geräte eignet, indem es Daten entfernt, die für eine effiziente Anzeige von Assets nicht wichtig sind. USD ist ein Austauschformat, das für die Dateibearbeitung in den Tools zur Erstellung digitaler Inhalte verwendet werden kann.

iOS Quick Look unterstützt jedoch die Anzeige von USDZ-Dateien mit einer Teilmenge der USD-Dateispezifikation. Dieses Tool konvertiert glTF-Dateien in USDZ zur Anzeige im Quick Look und versucht, so viel wie möglich von glTFs Funktionalität in der iOS Quick Look-Laufzeit zu emulieren.

Der Emulationsprozess ist verlustbehaftet. Um beispielsweise doppelseitige glTF-Materialien zu unterstützen, wird die Geometrie verdoppelt. Dadurch kann die konvertierte glTF unter iOS korrekt angezeigt werden, aber der Import zurück in eine DCC-Anwendung hat nicht die gleichen Daten wie die ursprüngliche Quelldatei.

Dieses Tool befasst sich speziell mit dem Anwendungsfall der Konvertierung einer Datei aus glTF->USDZ->QuickLook.

Kompatibilität

Während USD ein universelles Format ist, konzentriert sich diese Bibliothek auf die Kompatibilität mit AR Quick Look. Der AR Quick Look Renderer unterstützt jedoch nur eine Teilmenge der glTF 2.0 Spezifikation, so dass es mehrere Einschränkungen gibt. Wo sinnvoll, werden fehlende Features emuliert, um glTF-Dateien unter iOS so originalgetreu wie möglich zu reproduzieren. Die Emulation kann verlustbehaftet sein und die Ausgabe ist nicht gut als Austauschformat geeignet.

GitHub

Wir haben unsere verwendete Quellen auf GitHub geteilt. Es ist der Stand der Technik, den wir verwenden. https://github.com/r23/usd_from_gltf.

Nach der Installation

Steht Ihnen usd_from_gltf zur Vergügung. Wir haben usd_from_gltf auf unserem Windwos 10 Rechner installiert.

Mit usd_from_gltf.exe -- help erhalten Sie folgende Hilfe angezeigt.

usd_from_gltf – Generate USD files from glTF.
Usage:
usd_from_gltf [–all_nodes] [–noall_nodes] [–scene ] [–anim
] [–root_scale ] [–limit_bounds ]
[–jpg_quality ] [–jpg_subsamp ]
[–png_level ] [–image_power_of_2]
[–noimage_power_of_2] [–image_scale ]
[–image_size_min ] [–image_size_max ]
[–image_limit_total ] [–image_limit_step ]
[–add_debug_bone_meshes] [–noadd_debug_bone_meshes]
[–bake_texture_color_scale_bias]
[–nobake_texture_color_scale_bias] [–bake_alpha_cutoff]
[–nobake_alpha_cutoff] [–bake_skin_normals]
[–nobake_skin_normals] [–black_occlusion_is_white]
[–noblack_occlusion_is_white] [–delete_unused]
[–nodelete_unused] [–delete_generated]
[–nodelete_generated] [–disable_multiple_uvsets]
[–nodisable_multiple_uvsets] [–emissive_is_linear]
[–noemissive_is_linear] [–emulate_double_sided]
[–noemulate_double_sided] [–emulate_specular_workflow]
[–noemulate_specular_workflow] [–fix_accidental_alpha]
[–nofix_accidental_alpha] [–fix_skinned_normals]
[–nofix_skinned_normals] [–merge_identical_materials]
[–nomerge_identical_materials] [–merge_skeletons]
[–nomerge_skeletons] [–normalize_normals]
[–nonormalize_normals] [–normalize_skin_scale]
[–nonormalize_skin_scale] [–prefer_jpeg]
[–noprefer_jpeg] [–print_timing] [–noprint_timing]
[–remove_invisible] [–noremove_invisible]
[–remove_node_prefix ] …
[–reverse_culling_for_inverse_scale]
[–noreverse_culling_for_inverse_scale]
[–warn_ios_incompat] [–nowarn_ios_incompat]
[–nowarn_extension ] … [–plugin_path
] [–nousage] [–] [–version] [-h] …
Where:
–all_nodes
Export all nodes rather than a single scene.

–noall_nodes
Disable –all_nodes. [Default]

–scene
Override default scene specified by glTF. [default=-1]

–anim
Set the animation to export. [default=0]

–root_scale
Scale applied to the model root. [default=100.000000]

–limit_bounds
Adjust scale to limit bounding-box size. [default=0.000000]

–jpg_quality
JPG compression quality [1=worst, 100=best]. [default=85]

–jpg_subsamp
JPG chroma subsampling method [0=best, 2=worst]. [default=0]

–png_level
PNG compression level [0=fastest, 9=smallest]. [default=9]

–image_power_of_2
Force images to power-of-2 in size when resizing.

–noimage_power_of_2
Disable –image_power_of_2. [Default]

–image_scale
Global image resize scale. [default=1.000000]

–image_size_min
Minimum image size when resizing. [default=1]

–image_size_max
Maximum image size when resizing. [default=16384]

–image_limit_total
Limit the total size of all images after decompression.
[default=167772160]

–image_limit_step
Step used when limiting total image size. [default=0.500000]

–add_debug_bone_meshes
Add debug meshes to each transform node to visualize animation.

–noadd_debug_bone_meshes
Disable –add_debug_bone_meshes. [Default]

–bake_texture_color_scale_bias
Bake texture color scale and bias into the texture. [Default]

–nobake_texture_color_scale_bias
Disable –bake_texture_color_scale_bias.

–bake_alpha_cutoff
Bake alpha cutoff into textures. [Default]

–nobake_alpha_cutoff
Disable –bake_alpha_cutoff.

–bake_skin_normals
Bake skinned vertex normals to the first frame of animation. [Default]

–nobake_skin_normals
Disable –bake_skin_normals.

–black_occlusion_is_white
If the occlusion channel is pure black, replace it with pure white.
[Default]

–noblack_occlusion_is_white
Disable –black_occlusion_is_white.

–delete_unused
Delete unused intermediate output files. [Default]

–nodelete_unused
Disable –delete_unused.

–delete_generated
Delete all generated files except the output usda/usdz file.

–nodelete_generated
Disable –delete_generated. [Default]

–disable_multiple_uvsets
Replace textures referencing secondary UV sets with a solid color.
[Default]

–nodisable_multiple_uvsets
Disable –disable_multiple_uvsets.

–emissive_is_linear
Output emissive textures in linear space. [Default]

–noemissive_is_linear
Disable –emissive_is_linear.

–emulate_double_sided
Emulate double-sided geometry by duplicating single-sided geometry.
[Default]

–noemulate_double_sided
Disable –emulate_double_sided.

–emulate_specular_workflow
Convert diffuse+specular+glossiness to albedo+metallic+roughness.
[Default]

–noemulate_specular_workflow
Disable –emulate_specular_workflow.

–fix_accidental_alpha
Fix accidental alpha by ignoring edge pixels. [Default]

–nofix_accidental_alpha
Disable –fix_accidental_alpha.

–fix_skinned_normals
Work around iOS viewer not skinning normals. [Default]

–nofix_skinned_normals
Disable –fix_skinned_normals.

–merge_identical_materials
Merge materials with identical parameters, irrespective of name.
[Default]

–nomerge_identical_materials
Disable –merge_identical_materials.

–merge_skeletons
Merge multiple skeletons into one. [Default]

–nomerge_skeletons
Disable –merge_skeletons.

–normalize_normals
Normalize normal map vectors. [Default]

–nonormalize_normals
Disable –normalize_normals.

–normalize_skin_scale
Normalize the skin root joint scale to 1.0. [Default]

–nonormalize_skin_scale
Disable –normalize_skin_scale.

–prefer_jpeg
Prefer saving images as jpeg. [Default]

–noprefer_jpeg
Disable –prefer_jpeg.

–print_timing
Print conversion time stats.

–noprint_timing
Disable –print_timing. [Default]

–remove_invisible
Remove geometry that’s invisible due to material state. [Default]

–noremove_invisible
Disable –remove_invisible.

–remove_node_prefix (accepted multiple times)
Remove nodes matching any of these prefixes (case insensitive).

–reverse_culling_for_inverse_scale
Reverse polygon winding during conversion for inverse scale. [Default]

–noreverse_culling_for_inverse_scale
Disable –reverse_culling_for_inverse_scale.

–warn_ios_incompat
Emit warnings for features that are incompatible with the iOS viewer.
[Default]

–nowarn_ios_incompat
Disable –warn_ios_incompat.

–nowarn_extension (accepted multiple times)
Disable warnings for unrecognized glTF extensions.

–plugin_path
Paths to USD plugins (may contain wildcards). [default=]

–nousage
Don’t print usage on argument error.

–, –ignore_rest
Ignores the rest of the labeled arguments following this flag.

–version
Displays version information and exits.

-h, –help
Displays usage information and exits.

(accepted multiple times)
(required) Input glTF (.gltf) and output USD (.usd, .usdc, .usda,
.usdz, or .usd-) pairs.