panda3d/pandatool/src/assimp/config_assimp.cxx
rdb db6ea00967 assimp: Add assimp-collapse-dummy-root-node option
This is false for now, but will be true in the future.

See #366
2022-11-03 13:18:49 +01:00

115 lines
4.4 KiB
C++

/**
* PANDA 3D SOFTWARE
* Copyright (c) Carnegie Mellon University. All rights reserved.
*
* All use of this software is subject to the terms of the revised BSD
* license. You should have received a copy of this license along
* with this source code in a file named "LICENSE."
*
* @file config_assimp.cxx
* @author rdb
* @date 2011-03-29
*/
#include "config_assimp.h"
#include "loaderFileTypeAssimp.h"
#include "dconfig.h"
#include "loaderFileTypeRegistry.h"
ConfigureDef(config_assimp);
NotifyCategoryDef(assimp, "");
ConfigureFn(config_assimp) {
init_libassimp();
}
ConfigVariableBool assimp_calc_tangent_space
("assimp-calc-tangent-space", false,
PRC_DESC("Calculates tangents and binormals for meshes imported via Assimp."));
ConfigVariableBool assimp_join_identical_vertices
("assimp-join-identical-vertices", true,
PRC_DESC("Merges duplicate vertices. Set this to false if you want each "
"vertex to only be in use on one triangle."));
ConfigVariableBool assimp_improve_cache_locality
("assimp-improve-cache-locality", true,
PRC_DESC("Improves rendering performance of the loaded meshes by reordering "
"triangles for better vertex cache locality. Set this to false if "
"you need geometry to be loaded in the exact order that it was "
"specified in the file, or to improve load performance."));
ConfigVariableBool assimp_remove_redundant_materials
("assimp-remove-redundant-materials", true,
PRC_DESC("Removes redundant/unreferenced materials from assets."));
ConfigVariableBool assimp_fix_infacing_normals
("assimp-fix-infacing-normals", false,
PRC_DESC("Determines which normal vectors are facing inward and inverts them "
"so that they are facing outward."));
ConfigVariableBool assimp_optimize_meshes
("assimp-optimize-meshes", true,
PRC_DESC("Reduces the number of draw calls by unifying geometry with the same "
"materials. Especially effective in conjunction with "
"assimp-optimize-graph and assimp-remove-redundant-materials."));
ConfigVariableBool assimp_optimize_graph
("assimp-optimize-graph", false,
PRC_DESC("Optimizes the scene geometry by flattening the scene hierarchy. "
"This is very efficient (combined with assimp-optimize-meshes), but "
"it may result the hierarchy to become lost, so it is disabled by "
"default."));
ConfigVariableBool assimp_flip_winding_order
("assimp-flip-winding-order", false,
PRC_DESC("Set this true to flip the winding order of all models loaded via "
"the Assimp loader. Note that you may need to clear the model-cache "
"after changing this."));
ConfigVariableBool assimp_gen_normals
("assimp-gen-normals", false,
PRC_DESC("Set this true to generate normals (if absent from file) on import. "
"See assimp-smooth-normal-angle for more information. "
"Note that you may need to clear the model-cache after "
"changing this."));
ConfigVariableDouble assimp_smooth_normal_angle
("assimp-smooth-normal-angle", 0.0,
PRC_DESC("Set this to anything other than 0.0 in degrees (so 180.0 is PI) to "
"specify the maximum angle that may be between two face normals at "
"the same vertex position that are smoothed together. Sometimes "
"referred to as 'crease angle'. Only has effect if "
"assimp-gen-normals is set to true and the file does not contain "
"normals. Note that you may need to clear the model-cache after "
"changing this."));
ConfigVariableBool assimp_collapse_dummy_root_node
("assimp-collapse-dummy-root-node", false,
PRC_DESC("If set to true, collapses the root node that Assimp creates, if it "
"appears to be a synthetic dummy root node and contains no meshes. "
"This variable is new as of Panda3D 1.10.13 and will become true by "
"default as of Panda3D 1.11.0."));
/**
* Initializes the library. This must be called at least once before any of
* the functions or classes in this library can be used. Normally it will be
* called by the static initializers and need not be called explicitly, but
* special cases exist.
*/
void
init_libassimp() {
static bool initialized = false;
if (initialized) {
return;
}
initialized = true;
LoaderFileTypeAssimp::init_type();
LoaderFileTypeRegistry *reg = LoaderFileTypeRegistry::get_global_ptr();
reg->register_type(new LoaderFileTypeAssimp);
}