diff --git a/Editor/Scripts/GLTFImporter.cs b/Editor/Scripts/GLTFImporter.cs index fd0855d7d..88112dd68 100644 --- a/Editor/Scripts/GLTFImporter.cs +++ b/Editor/Scripts/GLTFImporter.cs @@ -588,6 +588,17 @@ string GetUniqueName(string desiredName) ctx.AddObjectToAsset(GetUniqueName(tex.name), tex); if (invalidTextures.Contains(tex)) tex.hideFlags = HideFlags.HideInHierarchy | HideFlags.HideInInspector; + + // platform-dependant texture compression + var buildTargetName = BuildPipeline.GetBuildTargetName(ctx.selectedBuildTarget); + var format = TextureImporterHelper.GetAutomaticFormat(tex, buildTargetName); + var convertedFormat = (TextureFormat) (int) format; + if ((int) convertedFormat > -1) + { + // Debug.Log("Compressing texture " + tex.name + "(format: " + tex.format + ", mips: " + tex.mipmapCount + ") to: " + convertedFormat); + EditorUtility.CompressTexture(tex, convertedFormat, TextureCompressionQuality.Best); + // Debug.Log("Mips now: " + tex.mipmapCount); // TODO figure out why mipmaps disappear here + } } } } diff --git a/Editor/Scripts/Internal/DefaultImportSettings.meta b/Editor/Scripts/Internal/DefaultImportSettings.meta new file mode 100644 index 000000000..bbfba6963 --- /dev/null +++ b/Editor/Scripts/Internal/DefaultImportSettings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3e88d614baf1b41b8a6cbb3fab6b4af3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Scripts/Internal/DefaultImportSettings/DefaultTexture.png b/Editor/Scripts/Internal/DefaultImportSettings/DefaultTexture.png new file mode 100644 index 000000000..57c2ab7f8 Binary files /dev/null and b/Editor/Scripts/Internal/DefaultImportSettings/DefaultTexture.png differ diff --git a/Editor/Scripts/Internal/DefaultImportSettings/DefaultTexture.png.meta b/Editor/Scripts/Internal/DefaultImportSettings/DefaultTexture.png.meta new file mode 100644 index 000000000..a6a3fcbaa --- /dev/null +++ b/Editor/Scripts/Internal/DefaultImportSettings/DefaultTexture.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 7b7ff3cec11c24c599d6f12443877d5e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 5 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 2 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Scripts/Internal/TextureImporterHelper.cs b/Editor/Scripts/Internal/TextureImporterHelper.cs new file mode 100644 index 000000000..522565761 --- /dev/null +++ b/Editor/Scripts/Internal/TextureImporterHelper.cs @@ -0,0 +1,51 @@ +using System; +using System.Reflection; +using UnityEditor; +using UnityEditor.Build; +using UnityEngine; + +namespace UnityGLTF +{ + public class TextureImporterHelper + { + private static MethodInfo GetFixedPlatformName; + private const string DefaultTextureAssetGuid = "7b7ff3cec11c24c599d6f12443877d5e"; + + public static TextureImporterFormat GetAutomaticFormat(Texture2D texture, string platform) + { + var defaultTextureImporter = AssetImporter.GetAtPath(AssetDatabase.GUIDToAssetPath(DefaultTextureAssetGuid)) as TextureImporter; + // defaultTextureImporter = new TextureImporter(); + + if (GetFixedPlatformName == null) + GetFixedPlatformName = typeof(TextureImporter) + .GetMethod("GetFixedPlatformName", BindingFlags.Static | BindingFlags.NonPublic); + + if (GetFixedPlatformName == null) + throw new MissingMethodException("TextureImporter.GetFixedPlatformName"); + + platform = GetFixedPlatformName.Invoke(null, new object[] { platform }) as string; + TextureImporterSettings importerSettings = new TextureImporterSettings(); + + importerSettings.aniso = 5; + importerSettings.wrapMode = texture.wrapMode; + importerSettings.filterMode = texture.filterMode; + importerSettings.mipmapEnabled = texture.mipmapCount > 1; + importerSettings.alphaSource = TextureImporterAlphaSource.FromInput; + + var hasAlpha = TextureUtil.HasAlphaTextureFormat(texture.format); + var isHDR = TextureUtil.IsHDRFormat(texture.format); + + // var platformSettings = new TextureImporterPlatformSettings(); + + foreach (BuildPlatform validPlatform in BuildPlatforms.instance.GetValidPlatforms()) + { + // TextureImporter.RecommendedFormatsFromTextureTypeAndPlatform + if (validPlatform.name == platform) + return TextureImporter.DefaultFormatFromTextureParameters(importerSettings, defaultTextureImporter.GetPlatformTextureSettings(platform), hasAlpha, isHDR, validPlatform.defaultTarget); + } + + // This should never happen + return TextureImporterFormat.Automatic; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Internal/TextureImporterHelper.cs.meta b/Editor/Scripts/Internal/TextureImporterHelper.cs.meta new file mode 100644 index 000000000..dd99339ae --- /dev/null +++ b/Editor/Scripts/Internal/TextureImporterHelper.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6301556340654c09aa8e389bfc561e81 +timeCreated: 1694362715 \ No newline at end of file