Validating feature support for USD files
Ensure that the renderer that displays your USD assets supports its features.
Overview
Depending on the device, its operating system, and the app, there are four renderers that might display your 3D assets: RealityKit, Raytracer, Storm, or SceneKit. Each renderer supports a subset of the USD features. Use the tables below to determine which features are available. See Creating USD files for Apple devices for more information on how to determine which engine renders your USD asset. This article identifies feature support for assets imported from USD files.
In some cases, the renderers might support features listed below, but do not support importing those features from USD files, and will be marked as unsupported. In the case of Storm, feature support may differ from the open source version.
Review general and media features
Each rendering engine supports a set of general and media attributes that cover fundamental features, such as which file types the renderer supports, and whether it supports instancing, which is a performance optimization where a renderer can inexpensively display a single asset multiple times in a scene.
USD | RealityKit | Raytracer | Storm | SceneKit |
|---|---|---|---|---|
Instancing | ✔ | ✔ | ✔ | ✔ |
Point instancing | ✔ | ✔ | ||
Transform animation | ✔ | ✔ | ✔ | ✔ |
.usdz files | ✔ | ✔ | ✔ | ✔ |
.usd / .usdc / .usda | ✔ | ✔ | ✔ | ✔ |
Visibility attribute | ✔ | ✔ | ✔ | ✔ |
Defer payload loading | ✔ | ✔ | ||
Variants | ✔ | ✔ | ✔ | partial |
Spatial audio | ✔ | |||
Accessibility | ✔ |
RealityKit supports instancing of mesh and texture data from imported USD files.
Accessibility data is supported when using USDKit to visualize content with RealityKit.
Variant support is handled differently between the renderers:
All renderers support loading the active variant.
RalityKit, Storm and Raytracer support changing the variant after loading the asset but this depends on the context. they are presented in
In Reality Composer Pro, RealityKit also supports changing the variant after loading the asset.
QuickLook allows you to change variants on the default prim after loading a USDZ asset.
Review geometry feature support
USD supports multiple ways to represent the shape of a 3D object, and has several features that affect the way these objects render.
If a renderer doesn’t support a feature that:
defines the shape of a 3D object, such as a NURBS patch (a mathematical description of a 3D surface), then the object doesn’t render at all. For example, assets defined using a NURBS patch render on Storm, but not on SceneKit or RealityKit.
modifies how an asset renders, the feature is just not used, but the object still displays. For example, an asset that uses subdivision surfaces (a feature that generates additional geometry on the fly) displays on all renderers, but only generates the additional geometry when supported.
USD | RealityKit | Raytracer | Storm | SceneKit |
|---|---|---|---|---|
Polygon meshes | ✔ | ✔ | ✔ | ✔ |
Vertex animation | ✔ | ✔ | ||
Primitive shapes | ✔ | ✔ | ✔ | ✔ |
Double-sided meshes | ✔ | ✔ | ✔ | |
Subdivision | ✔ | ✔ | ✔ | ✔ |
NURBS patches | ||||
Basis curves | partial | |||
Tetrahedral meshes | ||||
Points | ✔ | ✔ | ||
Camera | ✔ | ✔ | ✔ | |
Spatial cameras | ✔ | ✔ | ✔ | |
Immersive cameras | ✔ | |||
Geometry subsets | ✔ | ✔ | ✔ | ✔ |
Alembic | ✔ | ✔ | ✔ | ✔ |
Draco compression | ||||
Vertex colors | ✔ | ✔ | ✔ | ✔ |
Purpose | ✔ | ✔ | ✔ | ✔ |
All renderers support using attributes specified in the USD file.
Primitive Shapes are basic geometry types such as cubes, cones, and spheres. The plane type is not supported.
Alembic supports requires files written using the Ogawa format. The Legacy HDF5 format is not supported.
The Preview purpose is used by all renderers.
RealityKit supports subdivision on objects using a USD preview surface shader. Objects with custom MaterialX materials use standard polygonal meshes.
Tetrahedral meshes (
TetMesh) are volumetric meshes used in simulation and engineering data.Spatial and Immersive cameras are Apple camera types only supported in the Preview app on macOS 27 and later.
Raytracer supports catmull-rom basis curves only.
Review lighting support
The USD specification supports many kinds of lights, some that are well-suited to real-time use and others that are primarily intended for use in offline production tasks, such as rendering animations or special effects for movies, because they are computationally expensive. SceneKit and Storm don’t support USD light types that are too computationally expensive for real-time use. Because RealityKit is an AR-first renderer, it doesn’t use any lights included in a USD file, and instead bases its lighting on the scene’s real-world lighting.
USD | RealityKit | Raytracer | Storm | SceneKit |
|---|---|---|---|---|
Rectangle light | ✔ | |||
Distant light | ✔ | ✔ | ✔ | |
Sphere light | ✔ | ✔ | ✔ | |
Cylinder light | ✔ | ✔ | ||
Dome light | ✔ | ✔ | ✔ | |
Disk light | ✔ | |||
Mesh light | partial | |||
Volume light | partial | |||
Light shaping | partial | ✔ | ||
Shadow API | ✔ | |||
Light lists | ✔ | |||
Portal light | ✔ |
Raytracer supports mesh lights and volume lights, but without proper light sampling.
Raytracer has partial support for light shaping.
Review physics support
USD supports many physics simulation features. Only the RealityKit renderer supports simulation features.
USD | RealityKit | Raytracer | Storm | SceneKit |
|---|---|---|---|---|
Physics scene | ✔ | |||
Rigid body | ✔ | |||
Mass | ✔ | |||
Collisions | ✔ | |||
Mesh collisions | ||||
Physics materials | ✔ | |||
Collision groups | ||||
Filtered pairs | ||||
Physics joints | ||||
Physics limits | ||||
Physics drive | ||||
Articulation root |
USDKit does not support loading Physics data into RealityKit.
Review shader features
The USD specification includes a number of features for use by shaders and even includes a number of pre-defined shaders to ensure consistent rendering across platforms.
USD | RealityKit | Raytracer | Storm | SceneKit |
|---|---|---|---|---|
Material graph | ✔ | ✔ | ✔ | ✔ |
USD preview surface shader | ✔ | ✔ | ✔ | ✔ |
MaterialX | ✔ | ✔ | ✔ | |
Textures | ✔ | ✔ | ✔ | ✔ |
AVIF Textures | ✔ | ✔ | ✔ | ✔ |
Texture wrap modes | ✔ | ✔ | ✔ | ✔ |
Texture channel references | partial | ✔ | ✔ | ✔ |
Texture transforms | partial | ✔ | ✔ | ✔ |
Specular workflow | ✔ | ✔ | ||
Multiple UV sets | partial | ✔ | ✔ | ✔ |
Scale | partial | ✔ | ✔ | ✔ |
Bias | ✔ | ✔ | ✔ | |
ColorSpace | ✔ | ✔ | ✔ | |
Displacement | ✔ |
Each renderer may support MaterialX nodes to different degrees. Verify your asset rendering against your renderer of choice. The ShaderGraph documentation covers the support for RealityKit.
RealityKit has partial support for some shader features:
- Texture channel references
RealityKit supports only a single packed texture per material. You can, however, reference multiple scalar channels within a single texture.
- Texture transforms
RealityKit supports a single
UsdTransform2dper material. If a material contains multipleUsdTransform2Dinstances, the renderer will use the first one it finds.- Multiple UV sets
RealityKit supports two UV Sets.
- Scale
RealityKit supports USD texture scaling except for normal map textures.
- ColorSpace
RealityKit supports some known colorSpaces like DisplayP3 and sRGB. Color constants and textures will get conversions applied if colorSpace specifies a known name like “srgb_texture”, “lin_srgb”, “srgb_displayp3”, or “lin_displayp3”.
- sourceColorSpace
If colorSpace is not specified then the sourceColorSpace attribute is used for conversion of color textures, such as “sRGB” or “raw”.
If no colorSpace or sourceColorSpace value is provided then the embedded image color profile is used when loading color textures.
Review skeletons
Skeletal animation deforms a model based on a hierarchy of joints, which allows you to animate character assets and complex mechanical objects.
USD | RealityKit | Raytracer | Storm | SceneKit |
|---|---|---|---|---|
Skeletons | ✔ | ✔ | ✔ | ✔ |
Skeleton animation | ✔ | ✔ | ✔ | ✔ |
Blend Shapes | ✔ | ✔ | ✔ | ✔ |
Review volumes and particles
USD supports volumetric data and particle-based representations. These are used for effects such as smoke, fire, and clouds, as well as for 3D Gaussian Splats captured from real-world scenes.
USD | RealityKit | Raytracer | Storm | SceneKit |
|---|---|---|---|---|
Volumes (OpenVDB) | ✔ | ✔ | ||
Gaussian Splats | partial |
Storm renders Gaussian Splats as points rather than full volumetric splats.