def _from_dict(dict_data: dict):
        """Creates an Object3D (or its subclass) from a dict."""
        if not isinstance(dict_data, dict):
            raise ValueError("json_data must be a dictionary")

        cls_name = dict_data.get("_type", "Object3D")
        clz = getattr(threed, cls_name, Object3D)

        clz_main_args = {
            k: v
            for k, v in dict_data.items()
            if k
            not in [
                "_type",
                FO3D_VERSION_KEY,
                "uuid",
                "name",
                "visible",
                "children",
                "position",
                "quaternion",
                "scale",
                "default_material",
            ]
        }

        if cls_name == "Scene":
            # `Scene` has no name or visibility
            obj = clz(**clz_main_args)
        else:
            obj = clz(
                name=dict_data.get("name", ""),
                visible=dict_data.get("visible", True),
                **clz_main_args,
            )

            material = dict_data.get("default_material", None)

            if material is not None:
                obj.set_default_material(material)

        obj.position = Vector3(*dict_data.get("position", [0, 0, 0]))
        obj.quaternion = Quaternion(*dict_data.get("quaternion", [0, 0, 0, 1]))
        obj.scale = Vector3(*dict_data.get("scale", [1, 1, 1]))

        obj._uuid = dict_data.get("uuid", str(uuid.uuid4()))

        # recursively handle children
        for child_json in dict_data.get("children", []):
            child = Object3D._from_dict(child_json)
            obj.add(child)

        return obj
Creates an Object3D (or its subclass) from a dict.
fiftyone/core/threed/object_3d.py