All variants are mapped to the same runtime and UI flow for interaction. App-specific hierarchy variants are detected via *_SWITCH; native format variants are connected accordingly on import.
*_SWITCH → Variant A / Variant B / Variant C
GLB / glTF – native material variant path
GLB and glTF natively support material variants through the ratified Khronos extension KHR_materials_variants. Variant names are defined in the glTF asset; mesh primitives specify which material belongs to which variant. Geometry can be shared and does not need to be duplicated for pure material variants.
presentAR reads these variants on import and maps them to the shared variant and UI flow. For true geometry variants, the presentAR-specific SWITCH hierarchy remains available as an additional option.
Example: Chair → KHR_materials_variants → Red | Blue | Leather
USDZ – native path
USDZ is the package format; the variant system itself comes from OpenUSD. VariantSets are the native USD mechanism for switchable alternatives of a prim. They are not limited to materials: a variant can change material bindings, geometry, properties, or entire sub-hierarchies.
Example: Chair → VariantSet "Material" → Red | Blue | Leather
Native USDZ variants therefore do not require a presentAR-specific texture naming convention. The previous detection via texture suffixes can optionally remain as a legacy/fallback path.