From aeef9e2c1301fad6a1824ba8487b0b84a6a978d0 Mon Sep 17 00:00:00 2001 From: kgv Date: Tue, 10 Aug 2021 17:23:44 +0300 Subject: [PATCH] 0032524: Data Exchange, RWGltf_CafWriter - avoid writing translucent metallic materials RWGltf_GltfMaterialMap::DefineMaterial() and XCAFDoc_VisMaterial::ConvertToPbrMaterial() now reset matallic factor to 0.0f in case of transparent color. --- src/RWGltf/RWGltf_GltfMaterialMap.cxx | 1 + src/XCAFDoc/XCAFDoc_VisMaterial.cxx | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/RWGltf/RWGltf_GltfMaterialMap.cxx b/src/RWGltf/RWGltf_GltfMaterialMap.cxx index e81d1ae4fb..a5f4ee3e11 100644 --- a/src/RWGltf/RWGltf_GltfMaterialMap.cxx +++ b/src/RWGltf/RWGltf_GltfMaterialMap.cxx @@ -420,6 +420,7 @@ void RWGltf_GltfMaterialMap::DefineMaterial (const XCAFPrs_Style& theStyle, aPbrMat.BaseColor.SetRGB (theStyle.GetColorSurf()); if (theStyle.GetColorSurfRGBA().Alpha() < 1.0f) { + aPbrMat.Metallic = 0.0f; aPbrMat.BaseColor.SetAlpha (theStyle.GetColorSurfRGBA().Alpha()); } } diff --git a/src/XCAFDoc/XCAFDoc_VisMaterial.cxx b/src/XCAFDoc/XCAFDoc_VisMaterial.cxx index 34c1f9de17..da6bd33cae 100644 --- a/src/XCAFDoc/XCAFDoc_VisMaterial.cxx +++ b/src/XCAFDoc/XCAFDoc_VisMaterial.cxx @@ -191,7 +191,9 @@ XCAFDoc_VisMaterialPBR XCAFDoc_VisMaterial::ConvertToPbrMaterial() aPbrMat.BaseColorTexture = myCommonMat.DiffuseTexture; aPbrMat.BaseColor.SetRGB (myCommonMat.DiffuseColor); aPbrMat.BaseColor.SetAlpha (1.0f - myCommonMat.Transparency); - aPbrMat.Metallic = Graphic3d_PBRMaterial::MetallicFromSpecular (myCommonMat.SpecularColor); + aPbrMat.Metallic = myCommonMat.Transparency <= ShortRealEpsilon() + ? Graphic3d_PBRMaterial::MetallicFromSpecular (myCommonMat.SpecularColor) + : 0.0f; aPbrMat.Roughness = Graphic3d_PBRMaterial::RoughnessFromSpecular (myCommonMat.SpecularColor, myCommonMat.Shininess); aPbrMat.EmissiveFactor = myCommonMat.EmissiveColor; return aPbrMat; @@ -218,7 +220,9 @@ void XCAFDoc_VisMaterial::FillMaterialAspect (Graphic3d_MaterialAspect& theAspec { Graphic3d_PBRMaterial aPbr; aPbr.SetColor (myCommonMat.DiffuseColor); - aPbr.SetMetallic (Graphic3d_PBRMaterial::MetallicFromSpecular (myCommonMat.SpecularColor)); + aPbr.SetMetallic (myCommonMat.Transparency <= ShortRealEpsilon() + ? Graphic3d_PBRMaterial::MetallicFromSpecular (myCommonMat.SpecularColor) + : 0.0f); aPbr.SetRoughness (Graphic3d_PBRMaterial::RoughnessFromSpecular (myCommonMat.SpecularColor, myCommonMat.Shininess)); aPbr.SetEmission (myCommonMat.EmissiveColor); theAspect.SetPBRMaterial (aPbr);