Ejemplo n.º 1
0
        private static IEnumerable <FileInfo> ExportJpgOptimized(FileInfo outputFile, UnityEngine.Texture2D texture, uint quality)
        {
            var outputFiles = new List <FileInfo>();

            // Export color as temporary png
            var tmpColorFile    = new FileInfo(Path.ChangeExtension(GetTemporaryFilePath(outputFile), "png"));
            var tmpColorTexture = Texture2DAsset.BlitTexture(texture, UnityEngine.TextureFormat.RGB24);

            WritePng(tmpColorFile, tmpColorTexture);

            // Export color as jpg
            outputFiles.Add(ConvertPngToJpgOptimized(outputFile, tmpColorFile, quality));

            // Export jpg alpha as png
            if (Texture2DAsset.HasAlpha(texture))
            {
                // Bake alpha into color channels
                var tmpAlphaFile    = new FileInfo(Path.ChangeExtension(GetTemporaryFilePath(outputFile), "png"));
                var tmpAlphaTexture = Texture2DAsset.BlitTexture(texture, UnityEngine.TextureFormat.RGBA32, alphaOnly: true);

                // Export alpha as temporary png
                WritePng(tmpAlphaFile, tmpAlphaTexture);

                // Convert to 8-bit grayscale png
                var outputAlphaFile = new FileInfo(Path.ChangeExtension(GetAlphaFilePath(outputFile), "png"));
                outputFiles.Add(ConvertPngTo8BitGrayscale(outputAlphaFile, tmpAlphaFile));
            }

            return(outputFiles);
        }
Ejemplo n.º 2
0
        private static IEnumerable <FileInfo> ExportPng(FileInfo outputFile, UnityEngine.Texture2D texture)
        {
            var format        = Texture2DAsset.HasAlpha(texture) ? UnityEngine.TextureFormat.RGBA32 : UnityEngine.TextureFormat.RGB24;
            var outputTexture = Texture2DAsset.BlitTexture(texture, format);

            return(WritePng(outputFile, outputTexture).AsEnumerable());
        }
Ejemplo n.º 3
0
        public override Guid GetExportHash(UnityEngine.Texture2D texture)
        {
            var bytes = new List <byte>();

            // Add tiny texture settings bytes
            var settings     = Texture2DAsset.GetSettings(texture);
            var settingsJson = UnityEditor.EditorJsonUtility.ToJson(settings);

            bytes.AddRange(Encoding.ASCII.GetBytes(settingsJson));

            // Add texture importer settings bytes
            var assetPath = UnityEditor.AssetDatabase.GetAssetPath(texture);

            if (!string.IsNullOrEmpty(assetPath))
            {
                var importer = UnityEditor.AssetImporter.GetAtPath(assetPath) as UnityEditor.TextureImporter;
                if (importer != null)
                {
                    var importerJson = UnityEditor.EditorJsonUtility.ToJson(importer);
                    bytes.AddRange(Encoding.ASCII.GetBytes(importerJson));
                }
            }

            // Add image content hash bytes
            var contentHash = texture.imageContentsHash.ToString();

            bytes.AddRange(Encoding.ASCII.GetBytes(contentHash));

            // New guid from bytes
            return(GuidUtility.NewGuid(bytes.ToArray()));
        }
Ejemplo n.º 4
0
        public override Entity Import(IAssetImporter ctx, UnityEngine.Texture2D texture)
        {
            var entity = ctx.CreateEntity(typeof(Image2D), typeof(Image2DLoadFromFile), typeof(Image2DLoadFromFileImageFile));

            ctx.SetComponentData(entity, new Image2D()
            {
                disableSmoothing = texture.filterMode == UnityEngine.FilterMode.Point,
                imagePixelSize   = new Mathematics.float2(texture.width, texture.height),
                hasAlpha         = Texture2DAsset.HasAlpha(texture)
            });

            ctx.SetBufferFromString <Image2DLoadFromFileImageFile>(entity, "Data/" + texture.GetGuid().ToString("N"));

            return(entity);
        }
Ejemplo n.º 5
0
        private static IEnumerable <FileInfo> ExportJpg(FileInfo outputFile, UnityEngine.Texture2D texture, uint quality)
        {
            var outputFiles = new List <FileInfo>();

            // Export color as jpg
            var outputColorTexture = Texture2DAsset.BlitTexture(texture, UnityEngine.TextureFormat.RGB24);

            outputFiles.Add(WriteJpg(outputFile, outputColorTexture, quality));

            // Export alpha as png
            if (Texture2DAsset.HasAlpha(texture))
            {
                // Bake alpha into color channels, then kill alpha channel
                var outputAlphaTexture = Texture2DAsset.BlitTexture(texture, UnityEngine.TextureFormat.RGBA32, alphaOnly: true);
                outputAlphaTexture = Texture2DAsset.BlitTexture(outputAlphaTexture, UnityEngine.TextureFormat.RGB24);

                // Export alpha as png
                var outputAlphaFile = new FileInfo(Path.ChangeExtension(GetAlphaFilePath(outputFile), "png"));
                outputFiles.Add(WritePng(outputAlphaFile, outputAlphaTexture));
            }

            return(outputFiles);
        }
Ejemplo n.º 6
0
        public override IEnumerable <FileInfo> Export(FileInfo outputFile, UnityEngine.Texture2D texture)
        {
            var settings   = Texture2DAsset.GetSettings(texture);
            var formatType = Texture2DAsset.RealFormatType(texture, settings);

            switch (formatType)
            {
            case TextureFormatType.Source:
                return(AssetExporter.ExportSource(outputFile, texture));

            case TextureFormatType.PNG:
                return(ExportPng(outputFile, texture));

            case TextureFormatType.JPG:
                //return ExportJpg(outputFile, Object, settings.JpgCompressionQuality);
                return(ExportJpgOptimized(outputFile, texture, settings.JpgCompressionQuality));

            case TextureFormatType.WebP:
                return(ExportWebP(outputFile, texture, settings.WebPCompressionQuality));

            default:
                throw new InvalidEnumArgumentException(nameof(formatType), (int)formatType, formatType.GetType());
            }
        }