private void UpdateTexture(bool asPreview)
        {
            finalTexture = new Texture2D(texSize.x, texSize.y, TextureFormat.RGBAFloat, true);

            if (Metallic)
            {
                r_Metallic = DuplicateTexture.duplicateTexture(Metallic);
            }
            if (AmbientOcclusion)
            {
                r_AmbientOcclusion = DuplicateTexture.duplicateTexture(AmbientOcclusion);
            }
            if (DetailMask)
            {
                r_DetailMask = DuplicateTexture.duplicateTexture(DetailMask);
            }
            if (Smooth_Rough)
            {
                r_Smooth_Rough = DuplicateTexture.duplicateTexture(Smooth_Rough);
            }

            for (var x = 0; x < texSize.x; x++)
            {
                for (var y = 0; y < texSize.y; y++)
                {
                    float A;
                    var   R = Metallic ? r_Metallic.GetPixel(x, y).r : defaultMetal;

                    var G = AmbientOcclusion ? r_AmbientOcclusion.GetPixel(x, y).r : defaultAO;

                    var B = DetailMask ? r_DetailMask.GetPixel(x, y).r : defaultDetail;

                    if (Smooth_Rough)
                    {
                        if (useRough)
                        {
                            A = 1 - r_Smooth_Rough.GetPixel(x, y).r;
                        }
                        else
                        {
                            A = r_Smooth_Rough.GetPixel(x, y).r;
                        }
                    }
                    else
                    {
                        if (useRough)
                        {
                            A = 1 - defaultSmooth;
                        }
                        else
                        {
                            A = defaultSmooth;
                        }
                    }

                    finalTexture.SetPixel(x, y, new Color(R, G, B, A));
                }
            }
            finalTexture.Apply();
            EditorUtility.ClearProgressBar();
        }
        private void FlipChannel(Channels _channel)
        {
            //TODO: Funciona pero solo para texturas con alpha, hay que hacerlo para las otras
            var tempTexture = new Texture2D(textureMap.width, textureMap.height, TextureFormat.RGBAFloat, true);
            var dupTexture  = DuplicateTexture.duplicateTexture(textureMap);
            var x           = textureMap.width;
            var y           = textureMap.height;

            var hasAlpha = HasAlpha.hasAlpha(textureMap);

            //Invert green of texture with alpha
            if (hasAlpha && _channel == Channels.Green)
            {
                for (var i = 0; i < x; i++)
                {
                    for (var j = 0; j < y; j++)
                    {
                        tempTexture.SetPixel(i, j, new Color(dupTexture.GetPixel(i, j).r, 1 - dupTexture.GetPixel(i, j).g, dupTexture.GetPixel(i, j).b, dupTexture.GetPixel(i, j).a));
                    }
                }
            }
            //Invert alpha
            else if (hasAlpha && _channel == Channels.Alpha)
            {
                for (var i = 0; i < x; i++)
                {
                    for (var j = 0; j < y; j++)
                    {
                        tempTexture.SetPixel(i, j, new Color(dupTexture.GetPixel(i, j).r, dupTexture.GetPixel(i, j).g, dupTexture.GetPixel(i, j).b, 1 - dupTexture.GetPixel(i, j).a));
                    }
                }
            }
            //Invert red of image with alpha
            else if (hasAlpha && _channel == Channels.Red)
            {
                for (var i = 0; i < x; i++)
                {
                    for (var j = 0; j < y; j++)
                    {
                        tempTexture.SetPixel(i, j, new Color(1 - dupTexture.GetPixel(i, j).r, dupTexture.GetPixel(i, j).g, dupTexture.GetPixel(i, j).b, dupTexture.GetPixel(i, j).a));
                    }
                }
            }
            //Invert blue of image with alpha
            else if (hasAlpha && _channel == Channels.Blue)
            {
                for (var i = 0; i < x; i++)
                {
                    for (var j = 0; j < y; j++)
                    {
                        tempTexture.SetPixel(i, j, new Color(dupTexture.GetPixel(i, j).r, dupTexture.GetPixel(i, j).g, 1 - dupTexture.GetPixel(i, j).b, dupTexture.GetPixel(i, j).a));
                    }
                }
            }

            tempTexture.Apply();
            string path;

            if (saveToDifferentTexture)
            {
                path = EditorUtility.SaveFilePanelInProject("Save texture to directory", textureMap.name + "Inverted", "png", "Saved");
            }
            else
            {
                path = EditorUtility.SaveFilePanelInProject("Save texture to directory", textureMap.name, "png", "Saved");
            }

            var textureData = tempTexture.EncodeToPNG();

            if (path.Length == 0)
            {
                return;
            }
            if (textureData != null)
            {
                File.WriteAllBytes(path, textureData);
            }

            AssetDatabase.Refresh();

            Debug.Log("Saved");

            /*
             * if(_channel == Channels.Green)
             * {
             *  for (var i = 0; i < x; i++)
             *  {
             *      for (var j = 0; j < y; j++)
             *      {
             *          tempTexture.SetPixel(i, j, new Color(textureMap.GetPixel(i, j).r, 1-textureMap.GetPixel(i, j).g, textureMap.GetPixel(i, j).b));
             *      }
             *  }
             * }
             */
        }