Blender V4.3
usd_writer_mesh.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2019 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4#pragma once
5
7
8#include "BLI_map.hh"
9
10#include <pxr/usd/usdGeom/mesh.h>
11
13
14namespace blender::bke {
15class AttributeIter;
16} // namespace blender::bke
17
18namespace blender::io::usd {
19
20struct USDMeshData;
21
22/* Writer for USD geometry. Does not assume the object is a mesh object. */
24 public:
26
27 protected:
28 virtual bool is_supported(const HierarchyContext *context) const override;
29 virtual void do_write(HierarchyContext &context) override;
30
31 virtual Mesh *get_export_mesh(Object *object_eval, bool &r_needsfree) = 0;
32 virtual void free_export_mesh(Mesh *mesh);
33
34 private:
35 /* Mapping from material slot number to array of face indices with that material. */
37
38 void write_mesh(HierarchyContext &context, Mesh *mesh, const SubsurfModifierData *subsurfData);
39 pxr::TfToken get_subdiv_scheme(const SubsurfModifierData *subsurfData);
40 void write_subdiv(const pxr::TfToken &subdiv_scheme,
41 const pxr::UsdGeomMesh &usd_mesh,
42 const SubsurfModifierData *subsurfData);
43 void get_geometry_data(const Mesh *mesh, struct USDMeshData &usd_mesh_data);
44 void assign_materials(const HierarchyContext &context,
45 const pxr::UsdGeomMesh &usd_mesh,
46 const MaterialFaceGroups &usd_face_groups);
47 void write_normals(const Mesh *mesh, pxr::UsdGeomMesh &usd_mesh);
48 void write_surface_velocity(const Mesh *mesh, const pxr::UsdGeomMesh &usd_mesh);
49
50 void write_custom_data(const Object *obj, const Mesh *mesh, const pxr::UsdGeomMesh &usd_mesh);
51 void write_generic_data(const Mesh *mesh,
52 const pxr::UsdGeomMesh &usd_mesh,
53 const bke::AttributeIter &attr);
54 void write_uv_data(const pxr::UsdGeomMesh &usd_mesh,
55 const bke::AttributeIter &attr,
56 const StringRef active_uvmap_name);
57};
58
60 bool write_skinned_mesh_;
61 bool write_blend_shapes_;
62
63 public:
65
66 protected:
67 virtual void do_write(HierarchyContext &context) override;
68
69 virtual Mesh *get_export_mesh(Object *object_eval, bool &r_needsfree) override;
70
75 void set_skel_export_flags(const HierarchyContext &context);
76
77 void init_skinned_mesh(const HierarchyContext &context);
78 void init_blend_shapes(const HierarchyContext &context);
79
80 void add_shape_key_weights_sample(const Object *obj);
81};
82
83} // namespace blender::io::usd
USDGenericMeshWriter(const USDExporterContext &ctx)
virtual void do_write(HierarchyContext &context) override
virtual bool is_supported(const HierarchyContext *context) const override
virtual Mesh * get_export_mesh(Object *object_eval, bool &r_needsfree)=0
virtual void free_export_mesh(Mesh *mesh)
virtual void do_write(HierarchyContext &context) override
USDMeshWriter(const USDExporterContext &ctx)
void add_shape_key_weights_sample(const Object *obj)
void init_skinned_mesh(const HierarchyContext &context)
void init_blend_shapes(const HierarchyContext &context)
virtual Mesh * get_export_mesh(Object *object_eval, bool &r_needsfree) override
void set_skel_export_flags(const HierarchyContext &context)