private MFnDependencyNode getBabylonMaterialNode(MFnDependencyNode materialDependencyNode) { // Retreive connection MPlug connectionOutColor = materialDependencyNode.getConnection("outColor"); MPlugArray destinations = new MPlugArray(); connectionOutColor.destinations(destinations); // Retreive all Babylon Attributes dependency nodes List <MFnDependencyNode> babylonAttributesNodes = new List <MFnDependencyNode>(); foreach (MPlug destination in destinations) { MObject destinationObject = destination.node; if (destinationObject != null && destinationObject.hasFn(MFn.Type.kPluginHardwareShader)) { MFnDependencyNode babylonAttributesDependencyNode = new MFnDependencyNode(destinationObject); if (babylonAttributesDependencyNode.typeId.id == babylonStandardMaterialNode.id || babylonAttributesDependencyNode.typeId.id == babylonStingrayPBSMaterialNode.id || babylonAttributesDependencyNode.typeId.id == babylonAiStandardSurfaceMaterialNode.id) { babylonAttributesNodes.Add(babylonAttributesDependencyNode); } } } if (babylonAttributesNodes.Count == 0) { return(null); } else { // Occurs only if the user explicitly create a connection with several babylon attributes nodes. if (babylonAttributesNodes.Count > 1) { RaiseWarning("Babylon attributes node attached to a material should be unique. The first one is going to be used.", 2); } // Return the first shading engine node return(babylonAttributesNodes[0]); } }