Example #1
0
        public static MFnDependencyNode CreateLayeredTextureNode(List <MFnDependencyNode> imageNodes)
        {
            //MFnDependencyNode layeredTextureNode = new MFnDependencyNode();
            //layeredTextureNode.create("layeredTexture");
            MFnDependencyNode layeredTextureNode   = CreateShadingNode(ShadingNodeType.Utility, "layeredTexture");
            MPlug             layeredTexInputsPlug = layeredTextureNode.findPlug(ConstantValue.plugName_layeredTextureInputs);
            //check place2DTextures
            MDGModifier dGModifier = new MDGModifier();

            for (int i = 0; i < imageNodes.Count; i++)
            {
                //place2dTexture setting
                MFnDependencyNode p2dNode = GetPlace2dTextureForTex(imageNodes[i]);
                p2dNode.findPlug("wrapU").setBool(false);
                p2dNode.findPlug("translateFrameU").setFloat(i);

                //set tex default color to 0
                imageNodes[i].findPlug(ConstantValue.plugName_fileTexDefaultColorR).setFloat(0);
                imageNodes[i].findPlug(ConstantValue.plugName_fileTexDefaultColorG).setFloat(0);
                imageNodes[i].findPlug(ConstantValue.plugName_fileTexDefaultColorB).setFloat(0);

                //move uv
                MSelectionList matList = GetMaterialsWithTex(imageNodes[i]);
                for (int j = 0; j < matList.length; j++)
                {
                    MObject matObj = new MObject();
                    matList.getDependNode((uint)j, matObj);
                    string matName = new MFnDependencyNode(matObj).absoluteName;
                    Debug.Log("move uv for mat:" + matName);
                    MoveUV(i, 0, matName);
                }
                MPlug layeredTexInputPlug  = layeredTexInputsPlug.elementByLogicalIndex((uint)i);
                MPlug texOutColorPlug      = imageNodes[i].findPlug(ConstantValue.plugName_fileTexOutputColor);
                MPlug layeredTexInputColor = layeredTexInputPlug.child((int)ConstantValue.LayeredTextureInputDataIndex.Color);
                dGModifier.connect(texOutColorPlug, layeredTexInputColor);
                //set blendMode to add
                MPlug blendMode = layeredTexInputPlug.child((int)ConstantValue.LayeredTextureInputDataIndex.BlendMode);
                if (i < imageNodes.Count - 1)
                {
                    blendMode.setInt((int)ConstantValue.LayeredTextureBlendMode.Add);
                }
                else
                {
                    blendMode.setInt((int)ConstantValue.LayeredTextureBlendMode.None);
                }
            }
            dGModifier.doIt();
            return(layeredTextureNode);
        }
Example #2
0
 public static float[] asFloatArray(this MPlug mPlug)
 {
     float[] array = new float[mPlug.numChildren];
     for (uint index = 0; index < mPlug.numChildren; index++)
     {
         array[index] = mPlug.child(index).asFloat();
     }
     return(array);
 }
Example #3
0
 // This function is a utility that can be used to extract vector values from
 // plugs.
 //
 private MVector vectorPlugValue(MPlug plug)
 {
     if (plug.numChildren == 3)
     {
         double x, y, z;
         MPlug rx = plug.child(0);
         MPlug ry = plug.child(1);
         MPlug rz = plug.child(2);
         x = rx.asDouble();
         y = ry.asDouble();
         z = rz.asDouble();
         MVector result = new MVector(x, y, z);
         return result;
     }
     else
     {
         MGlobal.displayError("Expected 3 children for plug " + plug.name);
         MVector result = new MVector(0, 0, 0);
         return result;
     }
 }
Example #4
0
 // This function is a utility that can be used to extract vector values from
 // plugs.
 //
 private MVector vectorPlugValue(MPlug plug)
 {
     if (plug.numChildren == 3)
     {
         double x, y, z;
         MPlug  rx = plug.child(0);
         MPlug  ry = plug.child(1);
         MPlug  rz = plug.child(2);
         x = rx.asDouble();
         y = ry.asDouble();
         z = rz.asDouble();
         MVector result = new MVector(x, y, z);
         return(result);
     }
     else
     {
         MGlobal.displayError("Expected 3 children for plug " + plug.name);
         MVector result = new MVector(0, 0, 0);
         return(result);
     }
 }
Example #5
0
        static bool CopyShaderParam(MPlug from, MPlug to, ShaderParamType spt = ShaderParamType.Color)
        {
            if (from == null || to == null)
            {
                return(false);
            }
            MPlugArray plugArr = new MPlugArray();

            from.connectedTo(plugArr, true, false);
            if (plugArr.length == 0)
            {
                switch (spt)
                {
                case ShaderParamType.Color:
                {
                    to.child(0).setFloat(from.child(0).asFloat());
                    to.child(1).setFloat(from.child(1).asFloat());
                    to.child(2).setFloat(from.child(2).asFloat());
                    break;
                }

                case ShaderParamType.Float:
                {
                    to.setFloat(from.asFloat());
                    break;
                }
                }
            }
            else
            {
                MDGModifier dGModifier = new MDGModifier();
                Debug.Log(from.source.partialName(true));
                dGModifier.connect(from.source, to);
                dGModifier.doIt();
            }
            return(true);
        }
Example #6
0
        public static void ConvertToRSMaterial(MFnDependencyNode matNode, bool deleteOrigin)
        {
            //replace output to shadingEngine
            MPlug      plug_matColorOutput     = matNode.findPlug(ConstantValue.plugName_matColorOutput);
            MPlugArray plugArr_matColorOutDest = new MPlugArray();

            plug_matColorOutput.destinations(plugArr_matColorOutDest);
            //get textures
            MPlug plug_matColorInput   = matNode.findPlug(ConstantValue.plugName_matColorInput);
            MPlug plug_matTransparency = matNode.findPlug(ConstantValue.plugName_matTransparency);

            MFnDependencyNode rsArchiNode = CreateShadingNode(ShadingNodeType.Shader, ConstantValue.nodeName_RS_Architectural);

            if (matNode.name.StartsWith("mat_"))
            {
                rsArchiNode.setName("rs" + matNode.name);
            }
            else
            {
                rsArchiNode.setName("rsmat_" + matNode.name);
            }
            MPlug       plug_rsArchiDiffuse     = rsArchiNode.findPlug(ConstantValue.plugName_RS_diffuse);
            MPlug       plug_rsArchiTransColor  = rsArchiNode.findPlug(ConstantValue.plugName_RS_transColor);
            MPlug       plug_rsArchiTransWeight = rsArchiNode.findPlug(ConstantValue.plugName_RS_transWeight);
            MPlug       plug_rsArchiOutColor    = rsArchiNode.findPlug(ConstantValue.plugName_RS_outColor);
            MDGModifier dGModifier = new MDGModifier();

            for (int i = 0; i < plugArr_matColorOutDest.length; i++)
            {
                dGModifier.disconnect(plug_matColorOutput, plugArr_matColorOutDest[i]);
                dGModifier.connect(plug_rsArchiOutColor, plugArr_matColorOutDest[i]);
            }

            CopyShaderParam(plug_matColorInput, plug_rsArchiDiffuse);
            //if (plug_matColorInput.source == null)
            //{
            //    plug_rsArchiDiffuse.child(0).setFloat(plug_matColorInput.child(0).asFloat());
            //    plug_rsArchiDiffuse.child(1).setFloat(plug_matColorInput.child(1).asFloat());
            //    plug_rsArchiDiffuse.child(2).setFloat(plug_matColorInput.child(2).asFloat());
            //}
            //else
            //{
            //    dGModifier.connect(plug_matColorInput.source, plug_rsArchiDiffuse);
            //}

            CopyShaderParam(plug_matTransparency, plug_rsArchiTransColor);
            if (plug_matTransparency.child(0).asFloat() == 0 && plug_matTransparency.child(1).asFloat() == 0 && plug_matTransparency.child(2).asFloat() == 0)
            {
                plug_rsArchiTransWeight.setFloat(1);
            }
            else
            {
                plug_rsArchiTransWeight.setFloat(0);
            }
            //if (plug_matTransparency.source == null)
            //{
            //    //plug_rsArchiTransColor.setValue(plug_matColorInput.asMObject());
            //    float matTransparency = plug_matTransparency.asFloat();
            //    if (matTransparency == 0)
            //    {
            //        plug_rsArchiTransWeight.setFloat(0);
            //        plug_rsArchiTransColor.child(0).setFloat(0);
            //        plug_rsArchiTransColor.child(1).setFloat(0);
            //        plug_rsArchiTransColor.child(2).setFloat(0);
            //    }
            //    else
            //    {
            //        plug_rsArchiTransWeight.setFloat(1);
            //        plug_rsArchiTransColor.child(0).setFloat(plug_matTransparency.child(0).asFloat());
            //        plug_rsArchiTransColor.child(1).setFloat(plug_matTransparency.child(1).asFloat());
            //        plug_rsArchiTransColor.child(2).setFloat(plug_matTransparency.child(2).asFloat());
            //    }
            //}
            //else
            //{
            //    dGModifier.connect(plug_matTransparency.source, plug_rsArchiTransColor);
            //    plug_rsArchiTransWeight.setFloat(1);
            //}
            if (deleteOrigin)
            {
                dGModifier.deleteNode(matNode.objectProperty);
            }
            dGModifier.doIt();
        }
        private MFnDependencyNode getTextureDependencyNode(MFnDependencyNode materialDependencyNode, string plugName, List <MFnDependencyNode> textureModifiers = null)
        {
            MPlug mPlug = materialDependencyNode.findPlug(plugName);

            if (mPlug == null || mPlug.isNull || !mPlug.isConnected)
            {
                // a compound plug connected to a non-compound plug may not be marked as connected, try to get a child plug:
                if (mPlug.isCompound)
                {
                    // Retrieve the first non-empty plug and use the texture connected to it.
                    for (uint i = 0; i < mPlug.numChildren; i++)
                    {
                        MPlug child = mPlug.child(i);
                        if (child == null || child.isNull || !child.isConnected)
                        {
                            continue;
                        }
                        mPlug = child;
                        break;
                    }
                }

                if (mPlug == null || mPlug.isNull || !mPlug.isConnected)
                {
                    return(null);
                }
            }

            MObject           sourceObject          = mPlug.source.node;
            MFnDependencyNode textureDependencyNode = new MFnDependencyNode(sourceObject);

            RaiseMessage(materialDependencyNode.name + "." + plugName, logRankTexture);

            // Bump texture uses an intermediate node
            if (sourceObject.hasFn(MFn.Type.kBump))
            {
                Print(textureDependencyNode, logRankTexture, "Print bump node");
                logRankTexture++;
                if (textureModifiers != null)
                {
                    textureModifiers.Add(textureDependencyNode);
                }
                return(getTextureDependencyNode(textureDependencyNode, "bumpValue", textureModifiers));
            }

            // If a reverse node is used as an intermediate node
            if (sourceObject.hasFn(MFn.Type.kReverse))
            {
                Print(textureDependencyNode, logRankTexture, "Print reverse node");
                // TODO - reverse?
                logRankTexture++;
                if (textureModifiers != null)
                {
                    textureModifiers.Add(textureDependencyNode);
                }
                return(getTextureDependencyNode(textureDependencyNode, "input", textureModifiers));
            }

            // If a projection node is used as an intermediate node
            if (sourceObject.hasFn(MFn.Type.kProjection))
            {
                Print(textureDependencyNode, logRankTexture, "Print projection node");
                logRankTexture++;
                if (textureModifiers != null)
                {
                    textureModifiers.Add(textureDependencyNode);
                }
                return(getTextureDependencyNode(textureDependencyNode, "image", textureModifiers));
            }

            return(textureDependencyNode);
        }