# Blender USD Importer Design ```mermaid classDiagram USDPrimReader <|-- USDXformReader USDPrimReader: -Object* object_ USDPrimReader: -UsdPrim prim_ USDPrimReader: -USDPrimReader* parent_reader_ USDPrimReader: +object() Object* USDPrimReader: +object(Object) USDPrimReader: +prim() UsdPrim USDPrimReader: +parent() USDPrimReader USDPrimReader: +parent(USDPrimReader*) USDPrimReader: +valid() bool USDPrimReader: +create_object(bmain, time) USDPrimReader: +read_object_data(bmain, time) <<abstract>> USDPrimReader USDStageReader "0" --> "*" USDPrimReader : contains class USDStageReader{ -UsdStageRefPtr stage_ -vector<USDPrimReader*> readers_ -map<SdfPath, vector<USDPrimReader*>> proto_readers_ +valid() bool +collect_readers(bmain, params, settings) +readers() +proto_readers() } class USDXformReader{ +create_object(bmain, time) +read_object_data(bmain, time) +read_matrix(mat[4][4], time, scale, is_constant) } class USDMaterialReader { -USDImportParams params_ -Bmain *bmain_ +add_material(usd_material) Material* } USDXformReader <|-- USDGeomReader class USDGeomReader{ +create_object(bmain, time) +read_object_data(bmain, time) +read_mesh(existing_mesh, time, read_flag, vel_scale, err_str) +topology_changed() bool +add_cache_modifier() +add_subdiv_modifier() } USDXformReader <|-- USDLightReader class USDLightReader{ +create_object(bmain, time) +read_object_data(bmain, time) } USDXformReader <|-- USDCameraReader class USDCameraReader{ +create_object(bmain, time) +read_object_data(bmain, time) } USDXformReader <|-- USDVolumeReader class USDVolumeReader{ -UsdVolVolume volume_ +create_object(bmain, time) +read_object_data(bmain, time) } USDXformReader <|-- USDInstanceReader class USDInstanceReader{ +valid() +create_object(bmain, time) +read_object_data(bmain, time) +set_instance_collection(collection) +proto_path() SdfPath } USDGeomReader <|-- USDMeshReader USDMaterialReader <-- USDMeshReader class USDMeshReader { +create_object(bmain, time) +read_object_data(bmain, time) +read_mesh(existing_mesh, time, read_flag, vel_scale, err_str) +topology_changed() bool } USDGeomReader <|-- USDCurvesReader class USDCurvesReader { +valid() bool +create_object(bmain, time) +read_object_data(bmain, time) +read_mesh(existing_mesh, time, read_flag, vel_scale, err_str) } USDGeomReader <|-- USDNurbsReader class USDNurbsReader { +valid() bool +create_object(bmain, time) +read_object_data(bmain, time) +read_mesh(existing_mesh, time, read_flag, vel_scale, err_str) } ``` ## Reader Class Descriptions ### USDStageReader Implements logic for iterating over the USD stage and creating the USDPrimReader instances for convering USD prims to the corresponding Blender object types. If the Instancing import option is enabled, this class also provides functionality for traversing the stage's "master" prims to generate readers for converting scenegraph instance prototypes. ### USDPrimReader Abstract base class for all readers that create Blender objects from USD schemas. It wraps a single UsdPrim. ### USDXformReader Derives from USDPrimReader. Base class for all readers that create Blender objects that can compute a transform and create a transform cache constraint. By default, this reader creates a Blender Empty object. It typically wraps UsdGeomXformable schema prims. However, it may also wrap UsdGeomScope prims, in which case the matrix computation returns the identity. The reason for this exception was a design decision to represent USD scopes as Blender empties for organizing the scene, since Blender doesn't otherwise have an object type directly analogous to UsdGeomScope. ### USDGeomReader Derives from USDXformReader. Base class for readers that can create a mesh and apply cache and subdiv modifiers. ### USDMeshReader Derives from USDGeomReader. Wraps the UsdGeomMesh schema. Creates a Blender Mesh object. ### USDCurvesReader Derives from USDGeomReader. Wraps the UsdGeomBasisCurves schema. Creates a Blender Curve object. ### USDNurbsReader Derives from USDGeomReader. Wraps the UsdGeomNurbsCurves schema. Creates a Blender Curve object. ### USDInstanceReader Derives from USDXformReader. Wraps a USD prim that is an instance (typically a UsdGeomXformable). Creates a Blender object that stores a collection instance. ### USDCameraReader Derives from USDXformReader. Wraps the UsdGeomCamera schema. Creates a Blender Camera object. ### USDLightReader Derives from USDXformReader. Wraps the UsdLuxLight schema. Creates a Blender Light object. ### USDVolumeReader Derives from USDXformReader. Wraps the UsdVolVolumes schema. Creates a Blender Volume object. ### USDMaterialReader Stnadalone utility class for converting UsdShadeMaterial prims to Blender Materials. Currently used in USDMeshReader and contains experimental code for converting USD Preview Surface shaders to Blender Principled BSDF shader networks.