Index: OpenSceneGraph/trunk/src/osgPlugins/fbx/fbxMaterialToOsgStateSet.cpp
===================================================================
--- OpenSceneGraph/trunk/src/osgPlugins/fbx/fbxMaterialToOsgStateSet.cpp (revision 11108)
+++ OpenSceneGraph/trunk/src/osgPlugins/fbx/fbxMaterialToOsgStateSet.cpp (revision 11251)
@@ -81,5 +81,7 @@
         }
     }
-    return std::make_pair(pOsgMat.release(), pOsgTex.release());
+    StateSetContent result(pOsgMat.release(), pOsgTex.release());
+    _kFbxMaterialMap.insert(KFbxMaterialMap::value_type(pFbxMat, result));
+    return result;
 }
 
@@ -110,2 +112,33 @@
     }
 }
+
+void FbxMaterialToOsgStateSet::checkInvertTransparency()
+{
+    int zeroAlpha = 0, oneAlpha = 0;
+    for (KFbxMaterialMap::const_iterator it = _kFbxMaterialMap.begin(); it != _kFbxMaterialMap.end(); ++it)
+    {
+        const osg::Material* pMaterial = it->second.first;
+        float alpha = pMaterial->getDiffuse(osg::Material::FRONT).a();
+        if (alpha > 0.999f)
+        {
+            ++oneAlpha;
+        }
+        else if (alpha < 0.001f)
+        {
+            ++zeroAlpha;
+        }
+    }
+
+    if (zeroAlpha > oneAlpha)
+    {
+        //Transparency values seem to be back to front so invert them.
+
+        for (KFbxMaterialMap::const_iterator it = _kFbxMaterialMap.begin(); it != _kFbxMaterialMap.end(); ++it)
+        {
+            osg::Material* pMaterial = it->second.first;
+            osg::Vec4 diffuse = pMaterial->getDiffuse(osg::Material::FRONT);
+            diffuse.a() = 1.0f - diffuse.a();
+            pMaterial->setDiffuse(osg::Material::FRONT_AND_BACK, diffuse);
+        }
+    }
+}
