Files
workinf_Blender_Wasm/blender-5.2.0/source/blender/io/usd/usd.hh
2026-08-12 04:47:48 -04:00

275 lines
6.6 KiB
C++

/* SPDX-FileCopyrightText: 2019 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#include "../common/IO_orientation.hh"
#include "DEG_depsgraph.hh"
#include "DNA_modifier_types.h"
namespace blender {
struct bContext;
struct Mesh;
struct Object;
struct ReportList;
struct wmJobWorkerStatus;
namespace io::usd {
/**
* Behavior when the name of an imported material
* conflicts with an existing material.
*/
enum class MtlNameCollisionMode {
MakeUnique = 0,
ReferenceExisting = 1,
};
/* Enums specifying the USD material purpose,
* corresponding to #pxr::UsdShadeTokens 'allPurpose',
* 'preview', and 'render', respectively. */
enum class MtlPurpose { All = 0, Preview = 1, Full = 2 };
/**
* Behavior for importing of custom
* attributes / properties outside
* a prim's regular schema.
*/
enum class PropertyImportMode {
None = 0,
User = 1,
All = 2,
};
/**
* Behavior when importing textures from a package
* (e.g., USDZ archive) or from a URI path.
*/
enum class TexImportMode {
None = 0,
Pack,
Copy,
};
/**
* Behavior when the name of an imported texture
* file conflicts with an existing file.
*/
enum class TexNameCollisionMode {
UseExisting = 0,
Overwrite = 1,
};
enum class SubdivExportMode {
/** Subdivision scheme = None, export base mesh without subdivision. */
Ignore = 0,
/** Subdivision scheme = None, export subdivided mesh. */
Tessellate = 1,
/**
* Apply the USD subdivision scheme that is the closest match to Blender.
* Reverts to #SubdivExportMode::Tessellate if the subdivision method is not supported.
*/
Match = 2,
};
enum class XformOpMode {
TRS = 0,
TOS = 1,
MAT = 2,
};
enum class TextureDownscaleSize {
Custom = -1,
Keep = 0,
Size256 = 256,
Size512 = 512,
Size1024 = 1024,
Size2048 = 2048,
Size4096 = 4096
};
/**
* Behavior when exporting textures.
*/
enum class TexExportMode {
Keep = 0,
Preserve,
NewPath,
};
enum class SceneUnits {
Custom = -1,
Meters = 0,
Kilometers = 1,
Centimeters = 2,
Millimeters = 3,
Inches = 4,
Feet = 5,
Yards = 6,
};
struct USDExportParams {
bool selected_objects_only = false;
bool export_meshes = true;
bool export_lights = true;
bool export_cameras = true;
bool export_curves = true;
bool export_points = true;
bool export_volumes = true;
bool export_hair = true;
bool export_uvmaps = true;
bool rename_uvmaps = true;
bool export_normals = true;
bool export_mesh_colors = true;
bool export_materials = true;
bool export_armatures = true;
bool export_shapekeys = true;
bool only_deform_bones = false;
bool convert_world_material = true;
bool merge_parent_xform = false;
bool use_instancing = false;
bool export_custom_properties = true;
bool author_blender_name = true;
bool allow_unicode = true;
bool export_animation = false;
int incremental_frames = 0;
SubdivExportMode export_subdiv = SubdivExportMode::Match;
enum eEvaluationMode evaluation_mode = DAG_EVAL_VIEWPORT;
bool generate_preview_surface = true;
bool generate_materialx_network = true;
bool export_textures = false;
bool overwrite_textures = true;
bool relative_paths = true;
bool use_original_paths = false;
bool triangulate_meshes = false;
int quad_method = MOD_TRIANGULATE_QUAD_SHORTEDGE;
int ngon_method = MOD_TRIANGULATE_NGON_BEAUTY;
bool convert_orientation = false;
enum eIOAxis forward_axis = eIOAxis::IO_AXIS_NEGATIVE_Z;
enum eIOAxis up_axis = eIOAxis::IO_AXIS_Y;
XformOpMode xform_op_mode = XformOpMode::TRS;
TextureDownscaleSize usdz_downscale_size = TextureDownscaleSize::Keep;
int usdz_downscale_custom_size = 128;
std::string root_prim_path = "";
char collection[MAX_ID_NAME - 2] = "";
char custom_properties_namespace[MAX_IDPROP_NAME] = "";
std::string accessibility_label = "";
std::string accessibility_description = "";
SceneUnits convert_scene_units = SceneUnits::Meters;
float custom_meters_per_unit = 1.0f;
/** Communication structure between the wmJob management code and the worker code. Currently used
* to generate safely reports from the worker thread. */
wmJobWorkerStatus *worker_status = nullptr;
};
struct USDImportParams {
float scale;
float light_intensity_scale;
bool apply_unit_conversion_scale;
MeshSeqCacheModifierReadFlag mesh_read_flag;
bool set_frame_range;
bool is_sequence;
int sequence_len;
int offset;
bool relative_path;
bool import_defined_only;
bool import_visible_only;
bool import_cameras;
bool import_curves;
bool import_lights;
bool import_materials;
bool import_all_materials;
bool import_meshes;
bool import_points;
bool import_subdivision;
bool import_volumes;
bool import_shapes;
bool import_skeletons;
bool import_blendshapes;
bool create_collection;
bool create_world_material;
bool support_scene_instancing;
bool import_guide;
bool import_proxy;
bool import_render;
bool import_usd_preview;
bool set_material_blend;
bool validate_meshes;
bool merge_parent_xform;
MtlPurpose mtl_purpose;
MtlNameCollisionMode mtl_name_collision_mode;
TexImportMode import_textures_mode;
std::string prim_path_mask;
char import_textures_dir[/*FILE_MAXDIR*/ 768];
TexNameCollisionMode tex_name_collision_mode;
PropertyImportMode property_import_mode;
/**
* Communication structure between the wmJob management code and the worker code. Currently used
* to generate safely reports from the worker thread.
*/
wmJobWorkerStatus *worker_status;
};
/**
* The USD_export takes a `as_background_job` parameter, and returns a boolean.
*
* When `as_background_job=true`, returns false immediately after scheduling
* a background job.
*
* When `as_background_job=false`, performs the export synchronously, and returns
* true when the export was ok, and false if there were any errors.
*/
bool USD_export(const bContext *C,
const char *filepath,
const USDExportParams *params,
bool as_background_job,
ReportList *reports);
bool USD_import(bContext *C,
const char *filepath,
const USDImportParams *params,
bool as_background_job,
ReportList *reports);
int USD_get_version();
/* Similar to BLI_path_abs(), but also invokes the USD asset resolver
* to determine the absolute path. This is necessary for resolving
* paths with URIs that BLI_path_abs() would otherwise alter when
* attempting to normalize the path. */
void USD_path_abs(char *path, const char *basepath, bool for_import);
double get_meters_per_unit(const USDExportParams &params);
}; // namespace io::usd
} // namespace blender