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); }
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()); }
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())); }
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); }
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); }
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()); } }