summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsSsA01 <59872472+Riv1s-sSsA01@users.noreply.github.com>2024-02-28 04:26:13 +0900
committerGitHub <noreply@github.com>2024-02-27 20:26:13 +0100
commitf95050e7aab0579dcec3ce0cecb7a8f3555f65b2 (patch)
tree82da830e5978ad9cc876cf3b1e55990f37a8d28f
parent01231d0e6001f555c81dcfcc6c581fa5797ccac9 (diff)
Append a setting "AI_CONFIG_EXPORT_FBX_TRANSPARENCY_FACTOR_REFER_TO_OPACITY". (#5450)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
-rw-r--r--code/AssetLib/FBX/FBXExporter.cpp24
-rw-r--r--include/assimp/config.h.in10
2 files changed, 27 insertions, 7 deletions
diff --git a/code/AssetLib/FBX/FBXExporter.cpp b/code/AssetLib/FBX/FBXExporter.cpp
index cbaf83f0f..ae210eb1a 100644
--- a/code/AssetLib/FBX/FBXExporter.cpp
+++ b/code/AssetLib/FBX/FBXExporter.cpp
@@ -1089,6 +1089,8 @@ void FBXExporter::WriteObjects ()
bool bJoinIdenticalVertices = mProperties->GetPropertyBool("bJoinIdenticalVertices", true);
std::vector<std::vector<int32_t>> vVertexIndice;//save vertex_indices as it is needed later
+ const auto bTransparencyFactorReferencedToOpacity = mProperties->GetPropertyBool(AI_CONFIG_EXPORT_FBX_TRANSPARENCY_FACTOR_REFER_TO_OPACITY, false);
+
// geometry (aiMesh)
mesh_uids.clear();
indent = 1;
@@ -1445,13 +1447,21 @@ void FBXExporter::WriteObjects ()
// "TransparentColor" / "TransparencyFactor"...
// thanks FBX, for your insightful interpretation of consistency
p.AddP70colorA("TransparentColor", c.r, c.g, c.b);
- // TransparencyFactor defaults to 0.0, so set it to 1.0.
- // note: Maya always sets this to 1.0,
- // so we can't use it sensibly as "Opacity".
- // In stead we rely on the legacy "Opacity" value, below.
- // Blender also relies on "Opacity" not "TransparencyFactor",
- // probably for a similar reason.
- p.AddP70numberA("TransparencyFactor", 1.0);
+
+ if (!bTransparencyFactorReferencedToOpacity) {
+ // TransparencyFactor defaults to 0.0, so set it to 1.0.
+ // note: Maya always sets this to 1.0,
+ // so we can't use it sensibly as "Opacity".
+ // In stead we rely on the legacy "Opacity" value, below.
+ // Blender also relies on "Opacity" not "TransparencyFactor",
+ // probably for a similar reason.
+ p.AddP70numberA("TransparencyFactor", 1.0);
+ }
+ }
+ if (bTransparencyFactorReferencedToOpacity) {
+ if (m->Get(AI_MATKEY_OPACITY, f) == aiReturn_SUCCESS) {
+ p.AddP70numberA("TransparencyFactor", 1.0 - f);
+ }
}
if (m->Get(AI_MATKEY_COLOR_REFLECTIVE, c) == aiReturn_SUCCESS) {
p.AddP70colorA("ReflectionColor", c.r, c.g, c.b);
diff --git a/include/assimp/config.h.in b/include/assimp/config.h.in
index 67fc988be..897eecb19 100644
--- a/include/assimp/config.h.in
+++ b/include/assimp/config.h.in
@@ -1113,6 +1113,16 @@ enum aiComponent
#define AI_CONFIG_EXPORT_GLTF_UNLIMITED_SKINNING_BONES_PER_VERTEX \
"USE_UNLIMITED_BONES_PER VERTEX"
+/** @brief Specifies whether to write the value referenced to opacity in TransparencyFactor of each material.
+ *
+ * When this flag is not defined, the TransparencyFactor value of each meterial is 1.0.
+ * By enabling this flag, the value is 1.0 - opacity;
+
+ * Property type: Bool. Default value: false.
+ */
+#define AI_CONFIG_EXPORT_FBX_TRANSPARENCY_FACTOR_REFER_TO_OPACITY \
+ "EXPORT_FBX_TRANSPARENCY_FACTOR_REFER_TO_OPACITY"
+
/**
* @brief Specifies the blob name, assimp uses for exporting.
*