示例#1
0
        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]);
            }
        }