Creating USD files for Apple devices
Generate 3D assets that render as expected.
Overview
Universal Scene Description (USD) is a comprehensive 3D content-creation technology that supports a variety of real-time and offline workflows. Depending on the device and its operating system, there are three renderers that might display a 3D asset you create for your real-time apps and AR experiences: RealityKit, SceneKit, or Storm. Each renderer supports a specific subset of the USD features. Use only USD features supported by the renderer that displays your asset to ensure that it renders and functions as desired. For detailed information about which USD features each renderer supports, see Validating feature support for USD files.
Use Metallic Workflows for Shading
All three renderers use a physically based rendering (PBR) technique that the USD specification calls the metallic workflow. A metallic workflow shader takes metallic, roughness, and base color values as its core inputs. Most digital content-creation tools (DCCs) support PBR metallic workflow shaders and many of them default to using it.
USD and many DCCs also support a second PBR technique called the specular workflow (sometimes also called the glossy workflow). The specular workflow renders assets by using another algorithm that takes different input values. Only Storm supports the specular workflow, so for maximum compatibility, use metallic workflow shaders in your DCC, or your preview renders won’t accurately represent how your final rendered asset looks.
Target a renderer
Your app or operating system will use one of three renderers, based on these factors:
- RealityKit
The RealityKit renderer is part of the RealityKit framework. It handles drawing for Reality Composer, Reality Composer Pro and RealityKit scenes. Keynote on visionOS, Freeform, QuickLook and Xcode also use RealityKit to render USDZ files.
- SceneKit
The SceneKit renderer is part of the deprecated SceneKit framework. It renders 3D content in iWork for macOS and iOS, Motion, and all other apps that use the SceneKit framework, as well as renders SceneKit scenes in Xcode and Preview.
- Storm
The Storm renderer is a Metal-native implementation of Pixar’s high-performance preview renderer. Quicklook on macOS uses Storm to render USD, USDA and USDC files. Preview on macOS also uses Storm to display all USD file types, as well as files that may be converted to USD.
Use the process outlined below to ensure that your USD assets render correctly and function as expected in your app.
Validate your USD assets
USD files that aren’t well-formed may not work correctly. Validate that your assets conform to the USD specification before including them in your app by using OpenUSD’s usdchecker command-line tool with the --arkit flag. The usdchecker command-line tool is available with macOS starting with macOS 15.
Use the latest USD schemas
The USD adoption process often results in changes to proposed schemas before they become part of the specification. If you’ve created any assets using a preliminary schema, re-export them using the standard USD schema once the features your asset uses become part of the specification.
Target your use of subdivision
USD supports a feature called subdivision surfaces, which tells the renderer to generate additional geometry on-the-fly to make the entity render more smoothly. Target your use of this feature to instances when you most need smooth rendering. Each level of subdivision increases the number of rendered polygons in the model by a factor of four, which can have substantial performance implications.
Target your use of double sided geometry
USD geometry can be set to render both sides of a surface by setting the doubleSided attribute. Target your use of this feature as its support varies by renderer, which may affect how your content is represented, and its performance.
Limit rigged models to a single skeleton
USD supports skeletal animation, which you can use to animate a character or other complex model by manipulating a hierarchy of bones or joints to deform the model. Many DCCs allow you to use multiple skeletons (sometimes called armatures or rigs), to deform a single mesh. For example, for a character model, you might create one skeleton to handle facial animation and a second one to control general body movement. Before exporting models with multiple skeletons to a USD file, merge all the skeletons into a single joint or bone hierarchy. Models with multiple hierarchies can cause performance and compatibility issues with all three renderers.
Include material and skeleton bindings
USD requires that any geometry with an applied material use the MaterialBindingAPI. It also requires that any geometry that has a skeleton use the SkelBindingAPI. Without these APIs, the material or skeleton information may not be read by an application.
Expose configurations as variants
USD supports the ability to have multiple representations of an object using a feature called variants. USD files define the primary hierarchy path in the file using the defaultPrim metadata. Variants that are defined this defaultPrim hierarchy path are shown to the user as configuration options when using QuickLook with USDZ files. The variant configuration interface is available starting with visionOS 2, macOS 15, iOS 18 and iPadOS 18. When a configuration option is selected, the appearance of the USD being viewed in QuickLook will change to respect the selected variant.
Use efficient textures
Textures are very large contributors to the file size of your content, and its runtime performance.
Use textures that are appropriately sized for your content. Smaller texture sizes help with performance and size, but must be balanced against legibility.
USD files may use a wider range of texture formats, however USDZ files may only include a few texture formats: JPEG, PNG, EXR and AVIF. Use AVIF textures where possible for the best balance between quality and file size.
You can use Preview or the usdcrush command line tool to compress the textures within your USDZ file to use AVIF on macOS 16, or JPEG on macOS 15.
Converting dense meshes
Reduce the number of polygons in your geometry and the number of individual geometry elements to maximize performance.
When using computer aided design (CAD) files, or other dense meshes, you may need to use a DCC to combine geometry elements together and create new topology to reduce the complexity.
Convert your models from other formats
Use Preview or the usdcat command line tool on macOS 16 to convert your models from other common 3D file formats to USD. Both support a range of common file formats like Alembic, OBJ, STL and PLY.
Export directly to USD from your content creation tools when possible, or to one of the supported conversion formats. Unsupported conversion formats will require using a content creation tool to convert them first to USD or another supported conversion format.
Support scripts
We provide a set of scripts to assist you in creating great USD files, using the OpenUSD Python API. These scripts will help address many of the points above within your USD files, or enable you to create USDZ files using variants.
To download these scripts, see USD Support Scripts.