/// <summary> /// Modify the material to comply with its transparency parameters. /// </summary> /// <param name="material">The material/</param> private static void AdjustForTransparency(MaterialDescription material) { // Note: at this point, there is no other nodes than diffuse, specular, transparent, normal and displacement if (material.ColorNodes.ContainsKey(MaterialParameters.AlbedoDiffuse)) { var diffuseNode = material.GetMaterialNode(MaterialParameters.AlbedoDiffuse); if (material.ColorNodes.ContainsKey(MaterialParameters.TransparencyMap)) { var diffuseNodeName = material.ColorNodes[MaterialParameters.AlbedoDiffuse]; var transparentNodeName = material.ColorNodes[MaterialParameters.TransparencyMap]; var transparentNode = material.GetMaterialNode(MaterialParameters.TransparencyMap); if (diffuseNode == null || transparentNode == null) { return; } var foundTextureDiffuse = FindTextureNode(material, diffuseNodeName); var foundTextureTransparent = FindTextureNode(material, transparentNodeName); if (foundTextureDiffuse != null && foundTextureTransparent != null) { if (foundTextureDiffuse != foundTextureTransparent) { var alphaMixNode = new MaterialBinaryNode(diffuseNode, transparentNode, MaterialBinaryOperand.SubstituteAlpha); material.AddColorNode(MaterialParameters.AlbedoDiffuse, "pdx_diffuseWithAlpha", alphaMixNode); } } // set the key if it was missing material.Parameters.Set(MaterialParameters.UseTransparent, true); } else { // NOTE: MaterialParameters.UseTransparent is mostly runtime var isTransparent = false; if (material.Parameters.ContainsKey(MaterialParameters.UseTransparent)) { isTransparent = (bool)material.Parameters[MaterialParameters.UseTransparent]; } if (!isTransparent) { // remove the diffuse node var diffuseName = material.ColorNodes[MaterialParameters.AlbedoDiffuse]; material.Nodes.Remove(diffuseName); // add the new one var opaqueNode = new MaterialBinaryNode(diffuseNode, null, MaterialBinaryOperand.Opaque); material.AddColorNode(MaterialParameters.AlbedoDiffuse, "pdx_diffuseOpaque", opaqueNode); } } } }