]> OCCT Git - occt.git/commitdiff
0032524: Data Exchange, RWGltf_CafWriter - avoid writing translucent metallic materials
authorkgv <kgv@opencascade.com>
Tue, 10 Aug 2021 14:23:44 +0000 (17:23 +0300)
committerbugmaster <bugmaster@opencascade.com>
Thu, 12 Aug 2021 15:59:54 +0000 (18:59 +0300)
RWGltf_GltfMaterialMap::DefineMaterial() and XCAFDoc_VisMaterial::ConvertToPbrMaterial()
now reset matallic factor to 0.0f in case of transparent color.

src/RWGltf/RWGltf_GltfMaterialMap.cxx
src/XCAFDoc/XCAFDoc_VisMaterial.cxx

index e81d1ae4fbde2f3b28b8ea7d717f4fe8d282788e..a5f4ee3e110f12043f73e3656fa96f1438466ccf 100644 (file)
@@ -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());
     }
   }
index 34c1f9de17da2aa75c7a06a09be697d27a5d9624..da6bd33caebc733520155d910696b6e7cc687736 100644 (file)
@@ -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);