From 59f89f6e8f2e31c540e396c88bd579b8dfcf9e53 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Fri, 4 Apr 2025 02:00:43 +0900 Subject: [PATCH 1/4] =?UTF-8?q?ImporterContext=20=E3=81=AB=E5=BC=95?= =?UTF-8?q?=E6=95=B0=E8=BF=BD=E5=8A=A0=E3=80=82runtime=20=E3=81=AE?= =?UTF-8?q?=E3=83=87=E3=83=95=E3=82=A9=E3=83=AB=E3=83=88=E5=80=A4=E3=82=92?= =?UTF-8?q?=20MarkNonReadable=20=3D=20true=20=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Runtime/UniGLTF/IO/ImporterContext.cs | 2 +- .../UniGLTF/IO/ImporterContextSettings.cs | 32 +++++++++++++++++-- .../UnitySupportedImageTypeDeserializer.cs | 11 +++++-- .../Import/UnityTextureDeserializer.cs | 7 +++- 4 files changed, 46 insertions(+), 6 deletions(-) diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs index ce31fbc6c..60f0ad957 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs @@ -48,7 +48,7 @@ namespace UniGLTF MaterialDescriptorGenerator = materialGenerator ?? MaterialDescriptorGeneratorUtility.GetValidGltfMaterialDescriptorGenerator(); ExternalObjectMap = externalObjectMap ?? new Dictionary(); - textureDeserializer = textureDeserializer ?? new UnityTextureDeserializer(); + textureDeserializer = textureDeserializer ?? new UnityTextureDeserializer(_settings.MarkNonReadable); TextureFactory = new TextureFactory(textureDeserializer, ExternalObjectMap .Where(x => x.Value is Texture) diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContextSettings.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContextSettings.cs index 262a71719..f4eda4b50 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContextSettings.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContextSettings.cs @@ -1,19 +1,47 @@ -namespace UniGLTF +using UnityEngine; + +namespace UniGLTF { + /// + /// ImporterContext層の設定はここに。 + /// さすれば、VRMとVRM10を変えずに設定を追加できる。 + /// public class ImporterContextSettings { public bool LoadAnimation { get; } public Axes InvertAxis { get; } + public bool TextureIsReadalbe { get; } + public bool MarkNonReadable => !TextureIsReadalbe; /// /// ImporterContextの設定を指定する。 /// /// アニメーションをインポートする場合はtrueを指定(初期値はtrue) /// GLTF から Unity に変換するときに反転させる軸を指定(初期値はAxes.Z) - public ImporterContextSettings(bool loadAnimation = true, Axes invertAxis = Axes.Z) + /// textureのbitmapにアクセスするか(初期値はEditorの場合はtrue。それ以外はfalse) + public ImporterContextSettings( + bool loadAnimation = true, + Axes invertAxis = Axes.Z, + bool? textureIsReadable = default) { LoadAnimation = loadAnimation; InvertAxis = invertAxis; + if (textureIsReadable.HasValue) + { + TextureIsReadalbe = textureIsReadable.Value; + } + else + { + if (Application.isEditor) + { + TextureIsReadalbe = true; + } + else + { + // v0.128.4 からの挙動変更 + TextureIsReadalbe = false; + } + } } } } \ No newline at end of file diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/UnitySupportedImageTypeDeserializer.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/UnitySupportedImageTypeDeserializer.cs index 05a71c1df..1ae7b6f89 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/UnitySupportedImageTypeDeserializer.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/UnitySupportedImageTypeDeserializer.cs @@ -14,12 +14,19 @@ namespace UniGLTF /// /// /// `UnityEngine.ImageConversion.LoadImage` の第二引数 `markNonReadable` に相当。 - /// デフォルト値は `false`。 /// テクスチャ編集を行わないアプリケーションプログラム等では、 /// この値を `true` にすることでメモリ使用量の削減を期待できる。 /// このフラグの効用については `UnityEngine.Texture2D.Apply` に記述がある。 + /// + /// v0.128.4 + /// default は ImporterContextSettings.MarkNonReadable に従う /// - public bool MarkNonReadable { get; set; } = false; + public bool MarkNonReadable { get; } + + public UnitySupportedImageTypeDeserializer(bool markNonReadable) + { + MarkNonReadable = markNonReadable; + } public async Task LoadTextureAsync(DeserializingTextureInfo textureInfo, IAwaitCaller awaitCaller) { diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/UnityTextureDeserializer.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/UnityTextureDeserializer.cs index 491f89757..7ce56bbad 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/UnityTextureDeserializer.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/UnityTextureDeserializer.cs @@ -8,9 +8,14 @@ namespace UniGLTF /// public sealed class UnityTextureDeserializer : ITextureDeserializer { - private readonly UnitySupportedImageTypeDeserializer _unitySupportedDeserializer = new(); + private readonly UnitySupportedImageTypeDeserializer _unitySupportedDeserializer; private readonly KtxTextureDeserializer _ktxTextureDeserializer = new(); + public UnityTextureDeserializer(bool markNonReadable) + { + _unitySupportedDeserializer = new(markNonReadable); + } + public async Task LoadTextureAsync(DeserializingTextureInfo textureInfo, IAwaitCaller awaitCaller) { Texture2D texture = null; From 9ba79e9f9deec1ad21e257d2831c6850d4f67d31 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 10 Apr 2025 17:19:41 +0900 Subject: [PATCH 2/4] =?UTF-8?q?default,=20readable,=20nonReadable=20?= =?UTF-8?q?=E3=81=AE=E4=B8=89=E5=80=A4=20enum=20ImportedTexturesAccessibil?= =?UTF-8?q?ity=20=E3=82=92=E5=B0=8E=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Runtime/UniGLTF/IO/ImporterContext.cs | 2 +- .../UniGLTF/IO/ImporterContextSettings.cs | 22 +------ .../Import/ImportedTextureAccessibility.cs | 60 +++++++++++++++++++ .../ImportedTextureAccessibility.cs.meta | 11 ++++ .../UnitySupportedImageTypeDeserializer.cs | 11 ++-- .../Import/UnityTextureDeserializer.cs | 4 +- 6 files changed, 82 insertions(+), 28 deletions(-) create mode 100644 Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/ImportedTextureAccessibility.cs create mode 100644 Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/ImportedTextureAccessibility.cs.meta diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs index 60f0ad957..cebd8c4a3 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs @@ -48,7 +48,7 @@ namespace UniGLTF MaterialDescriptorGenerator = materialGenerator ?? MaterialDescriptorGeneratorUtility.GetValidGltfMaterialDescriptorGenerator(); ExternalObjectMap = externalObjectMap ?? new Dictionary(); - textureDeserializer = textureDeserializer ?? new UnityTextureDeserializer(_settings.MarkNonReadable); + textureDeserializer = textureDeserializer ?? new UnityTextureDeserializer(_settings.ImportedTexturesAccessibility); TextureFactory = new TextureFactory(textureDeserializer, ExternalObjectMap .Where(x => x.Value is Texture) diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContextSettings.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContextSettings.cs index f4eda4b50..437bb4551 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContextSettings.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContextSettings.cs @@ -10,8 +10,7 @@ namespace UniGLTF { public bool LoadAnimation { get; } public Axes InvertAxis { get; } - public bool TextureIsReadalbe { get; } - public bool MarkNonReadable => !TextureIsReadalbe; + public ImportedTexturesAccessibility ImportedTexturesAccessibility { get; } /// /// ImporterContextの設定を指定する。 @@ -22,26 +21,11 @@ namespace UniGLTF public ImporterContextSettings( bool loadAnimation = true, Axes invertAxis = Axes.Z, - bool? textureIsReadable = default) + ImportedTexturesAccessibility importedTexturesAccessibility = ImportedTexturesAccessibility.Default) { LoadAnimation = loadAnimation; InvertAxis = invertAxis; - if (textureIsReadable.HasValue) - { - TextureIsReadalbe = textureIsReadable.Value; - } - else - { - if (Application.isEditor) - { - TextureIsReadalbe = true; - } - else - { - // v0.128.4 からの挙動変更 - TextureIsReadalbe = false; - } - } + ImportedTexturesAccessibility = importedTexturesAccessibility; } } } \ No newline at end of file diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/ImportedTextureAccessibility.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/ImportedTextureAccessibility.cs new file mode 100644 index 000000000..267aaa64e --- /dev/null +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/ImportedTextureAccessibility.cs @@ -0,0 +1,60 @@ +using System; +using UnityEngine; + +namespace UniGLTF +{ + /// + /// Accessibility of imported texture bitmap + /// + public enum ImportedTexturesAccessibility + { + /// + /// Platform dependent. + /// IsEditor ? Readable : NonReadable + /// + Default, + + /// + /// Bitmaps are accessible. + /// Specify explicitly when exporting an imported model again + /// + Readable, + + /// + /// It can save memory usage. Recommended + /// + NonReadable, + } + + public static class TextureReadableParamExtensions + { + /// + /// convert to Texture2D.LoadImage param + /// + public static bool ToMarkNonReadable(this ImportedTexturesAccessibility self) + { + switch (self) + { + case ImportedTexturesAccessibility.Default: + if (Application.isEditor) + { + return false; + } + else + { + // v0.128.4 からの挙動変更 + return true; + } + + case ImportedTexturesAccessibility.Readable: + return false; + + case ImportedTexturesAccessibility.NonReadable: + return true; + + default: + throw new ArgumentException(); + } + } + } +} \ No newline at end of file diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/ImportedTextureAccessibility.cs.meta b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/ImportedTextureAccessibility.cs.meta new file mode 100644 index 000000000..ab7e2b3f5 --- /dev/null +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/ImportedTextureAccessibility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3fd49b42a267f4a449d22012f6997398 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/UnitySupportedImageTypeDeserializer.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/UnitySupportedImageTypeDeserializer.cs index 1ae7b6f89..2f66d35d2 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/UnitySupportedImageTypeDeserializer.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/UnitySupportedImageTypeDeserializer.cs @@ -18,14 +18,13 @@ namespace UniGLTF /// この値を `true` にすることでメモリ使用量の削減を期待できる。 /// このフラグの効用については `UnityEngine.Texture2D.Apply` に記述がある。 /// - /// v0.128.4 - /// default は ImporterContextSettings.MarkNonReadable に従う + /// v0.128.4 ImportedTexturesAccessibility を参照 /// - public bool MarkNonReadable { get; } + public ImportedTexturesAccessibility ImportedTexturesAccessibility { get; } = ImportedTexturesAccessibility.Default; - public UnitySupportedImageTypeDeserializer(bool markNonReadable) + public UnitySupportedImageTypeDeserializer(ImportedTexturesAccessibility importedTexturesAccessibility) { - MarkNonReadable = markNonReadable; + ImportedTexturesAccessibility = importedTexturesAccessibility; } public async Task LoadTextureAsync(DeserializingTextureInfo textureInfo, IAwaitCaller awaitCaller) @@ -35,7 +34,7 @@ namespace UniGLTF try { var texture = new Texture2D(2, 2, TextureFormat.ARGB32, textureInfo.UseMipmap, textureInfo.ColorSpace == ColorSpace.Linear); - texture.LoadImage(textureInfo.ImageData, MarkNonReadable); + texture.LoadImage(textureInfo.ImageData, ImportedTexturesAccessibility.ToMarkNonReadable()); await awaitCaller.NextFrame(); texture.wrapModeU = textureInfo.WrapModeU; diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/UnityTextureDeserializer.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/UnityTextureDeserializer.cs index 7ce56bbad..39b5af557 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/UnityTextureDeserializer.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/UnityTextureDeserializer.cs @@ -11,9 +11,9 @@ namespace UniGLTF private readonly UnitySupportedImageTypeDeserializer _unitySupportedDeserializer; private readonly KtxTextureDeserializer _ktxTextureDeserializer = new(); - public UnityTextureDeserializer(bool markNonReadable) + public UnityTextureDeserializer(ImportedTexturesAccessibility importedTexturesAccessibility) { - _unitySupportedDeserializer = new(markNonReadable); + _unitySupportedDeserializer = new(importedTexturesAccessibility); } public async Task LoadTextureAsync(DeserializingTextureInfo textureInfo, IAwaitCaller awaitCaller) From ef5c0da4e20d3a015511cfaed61c019869280dae Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 10 Apr 2025 18:05:36 +0900 Subject: [PATCH 3/4] ImportedTexturesAccessibility.Auto and Application.isPlaying --- .../Runtime/UniGLTF/IO/ImporterContextSettings.cs | 2 +- .../Import/ImportedTextureAccessibility.cs | 14 +++++++------- .../Import/UnitySupportedImageTypeDeserializer.cs | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContextSettings.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContextSettings.cs index 437bb4551..f5b2f4d9e 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContextSettings.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContextSettings.cs @@ -21,7 +21,7 @@ namespace UniGLTF public ImporterContextSettings( bool loadAnimation = true, Axes invertAxis = Axes.Z, - ImportedTexturesAccessibility importedTexturesAccessibility = ImportedTexturesAccessibility.Default) + ImportedTexturesAccessibility importedTexturesAccessibility = ImportedTexturesAccessibility.Auto) { LoadAnimation = loadAnimation; InvertAxis = invertAxis; diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/ImportedTextureAccessibility.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/ImportedTextureAccessibility.cs index 267aaa64e..1c0d398ee 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/ImportedTextureAccessibility.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/ImportedTextureAccessibility.cs @@ -10,18 +10,18 @@ namespace UniGLTF { /// /// Platform dependent. - /// IsEditor ? Readable : NonReadable + /// see: ToMarkNonReadable() /// - Default, + Auto, /// /// Bitmaps are accessible. - /// Specify explicitly when exporting an imported model again + /// Specify explicitly when exporting an imported model again. /// Readable, /// - /// It can save memory usage. Recommended + /// It can save memory usage. Recommended. /// NonReadable, } @@ -35,14 +35,14 @@ namespace UniGLTF { switch (self) { - case ImportedTexturesAccessibility.Default: - if (Application.isEditor) + case ImportedTexturesAccessibility.Auto: + if (Application.isPlaying) { return false; } else { - // v0.128.4 からの挙動変更 + // change behaviour from v0.128.4 return true; } diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/UnitySupportedImageTypeDeserializer.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/UnitySupportedImageTypeDeserializer.cs index 2f66d35d2..ee9c052ea 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/UnitySupportedImageTypeDeserializer.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/UnitySupportedImageTypeDeserializer.cs @@ -20,7 +20,7 @@ namespace UniGLTF /// /// v0.128.4 ImportedTexturesAccessibility を参照 /// - public ImportedTexturesAccessibility ImportedTexturesAccessibility { get; } = ImportedTexturesAccessibility.Default; + public ImportedTexturesAccessibility ImportedTexturesAccessibility { get; } = ImportedTexturesAccessibility.Auto; public UnitySupportedImageTypeDeserializer(ImportedTexturesAccessibility importedTexturesAccessibility) { From 1506823479983eec934e34a06343b5a7d32abb61 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 10 Apr 2025 18:35:58 +0900 Subject: [PATCH 4/4] fix --- .../IO/TextureIO/Import/ImportedTextureAccessibility.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/ImportedTextureAccessibility.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/ImportedTextureAccessibility.cs index 1c0d398ee..d012518e3 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/ImportedTextureAccessibility.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/Import/ImportedTextureAccessibility.cs @@ -38,12 +38,12 @@ namespace UniGLTF case ImportedTexturesAccessibility.Auto: if (Application.isPlaying) { - return false; + // change behaviour from v0.128.4 + return true; } else { - // change behaviour from v0.128.4 - return true; + return false; } case ImportedTexturesAccessibility.Readable: