Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

テスクチャベイク(TexTransTool等)を含む設定で別プラットフォームでmanual bake avatarしたものをアップロードするとアバターが黒色になる #164

Open
Narazaka opened this issue Feb 11, 2024 · 6 comments

Comments

@Narazaka
Copy link
Contributor

PCでmanual bakeするとアセット内にDXT5などでTexture2Dアセットが生成される。
これはTexture2DアセットなのでプラットフォームをAndroidにしたときにASTCに自動でならない。
このためエディタ上では正常に動作したまま、アップロードするとテクスチャが黒色などの状態になると思われる。

挙動は仕方ない雰囲気があるので、なんか警告があると嬉しい気がする(どこに?いつ?問題があるがあまりイメージは出来ていない)。

@bdunderscore
Copy link
Owner

んー… これはNDMFの管轄外な気がするような?

@Narazaka
Copy link
Contributor Author

どっちかというとTexTransToolなんですかね(雑にNDMFにテクスチャ参照つっこむとこうなるのかなと思ってたのでNDMFにたてたけど

@anatawa12
Copy link
Contributor

Bake後にアップロードするときに警告するならNDMFにPlatform Dependantなアセットかどうかを伝えてndmf側で警告してほしい気はします。

@kurotu
Copy link
Contributor

kurotu commented Mar 12, 2024

参考までですが、生成したテクスチャをPNGで保存してTextureImporterにいい感じプラットフォーム依存を吸収してもらおうとしても、ビルド完了までPNGをインポートできません。ビルド開始時にNDMF側で AssetDatabase.StartAssetEditing() が呼ばれてインポートが止まっているためです。

現状はPass内でテクスチャを生成する場合はTexture2Dのまま扱う(=プラットフォーム依存な形式に自分で圧縮する)必要がありました。

using nadena.dev.ndmf;
using System.IO;
using UnityEditor;
using UnityEngine;
using UnityEngine.Assertions;

[assembly: ExportsPlugin(typeof(TextureTestPlugin))]
public class TextureTestPlugin : Plugin<TextureTestPlugin>
{
    protected override void Configure()
    {
        InPhase(BuildPhase.Resolving).Run("Generate png", (ctx) =>
        {
            var tex = Texture2D.redTexture;
            var png = tex.EncodeToPNG();
            var path = "Assets/TextureTestPlugin.png";
            File.WriteAllBytes(path, png);

            AssetDatabase.Refresh();

            var newTex = AssetDatabase.LoadAssetAtPath<Texture2D>(path);
            Assert.IsNotNull(newTex); // ここで例外
        });
    }
}

一応、Passの開始時に AssetDatabase.StopAssetEditing() を、終了時に AssetDatabase.StartAssetEditing() をそれぞれ呼ぶことでPNGをインポートできましたが、NDMFの内部実装の知識を前提にしてしまうので、プラグインの責務でこれをやるのはできれば避けたい感じです。
(開始時にStop, 終了時にStartを呼ぶという入れ替わりもややこしい)

@anatawa12
Copy link
Contributor

Related?: #225

@kurotu
Copy link
Contributor

kurotu commented Apr 25, 2024

#225 での圧縮・保存時にフォーマットをチェックして警告を出すとかはできそうな気がしますね。
アップロードで毎回出ても鬱陶しいと思うのでマニュアルベイクの時だけ出せるといいですが、BuildContextでアップロードとマニュアルベイクの区別ってつくんでしたっけ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants