anatawa12 / AvatarOptimizer

AAO: Avatar Optimizer: Non Destructive Avatar Optimization Utilities
MIT License
196 stars 24 forks source link

ビルド時に asset is not temporary asset で停止(Animatorに関連?) #1317

Closed chigirits closed 4 weeks ago

chigirits commented 4 weeks ago

1.8.0-beta.11 にて、ビルド時に以下のエラーで停止してしまいます。

System.ArgumentException: asset is not temporary asset
Parameter name: asset
  at Anatawa12.AvatarOptimizer.AnimatorControllerMapper.ValidateTemporaryAsset (UnityEngine.Object asset) [0x00028] in .\Packages\com.anatawa12.avatar-optimizer\Editor\ObjectMapping\ObjectMappingContext.cs:187 
  at Anatawa12.AvatarOptimizer.AnimatorControllerMapper.FixAnimatorController (UnityEngine.RuntimeAnimatorController controller) [0x0000a] in .\Packages\com.anatawa12.avatar-optimizer\Editor\ObjectMapping\ObjectMappingContext.cs:192 
  at Anatawa12.AvatarOptimizer.ObjectMappingContext.OnDeactivate (nadena.dev.ndmf.BuildContext context) [0x000ea] in .\Packages\com.anatawa12.avatar-optimizer\Editor\ObjectMapping\ObjectMappingContext.cs:81 
  at nadena.dev.ndmf.BuildContext.Finish () [0x00040] in .\Packages\nadena.dev.ndmf\Editor\API\BuildContext.cs:440 
  at Anatawa12.AvatarOptimizer.AnimatorControllerMapper.ValidateTemporaryAsset (UnityEngine.Object asset) [0x00028] in .\Packages\com.anatawa12.avatar-optimizer\Editor\ObjectMapping\ObjectMappingContext.cs:187 
  at Anatawa12.AvatarOptimizer.AnimatorControllerMapper.FixAnimatorController (UnityEngine.RuntimeAnimatorController controller) [0x0000a] in .\Packages\com.anatawa12.avatar-optimizer\Editor\ObjectMapping\ObjectMappingContext.cs:192 
  at Anatawa12.AvatarOptimizer.ObjectMappingContext.OnDeactivate (nadena.dev.ndmf.BuildContext context) [0x000ea] in .\Packages\com.anatawa12.avatar-optimizer\Editor\ObjectMapping\ObjectMappingContext.cs:81 
  at nadena.dev.ndmf.BuildContext.Finish () [0x00040] in .\Packages\nadena.dev.ndmf\Editor\API\BuildContext.cs:440 

アバターの様々な階層に含まれるAnimatorのうち、特定のいくつかのAnimatorを削除するとエラーは発生しなくなります(それ以外のAnimatorについては問題は起きません)が、その状態からアバタールート直下に空のAnimatorを置いただけでも同様のエラーとなります。

Manual Bake Avatar した場合も同様のエラーは発生しますが、問題のAnimatorはそのまま出力されます。

anatawa12 commented 4 weeks ago

報告ありがとうございます。再現ができなかったためもう少し詳しく教えていただきたいです。

1) ValidateTemporaryAssetの中でnadena.dev.ndmf.BuildContext.Finishが呼び出されているようなスタックトレースとなっていますが、こちらの例外のスタックトレースはそのままのものでしょうか 2) 特定のいくつかのAnimatorを削除するとエラーは発生しなくなります とありますが、この削除すると発生しなくなるAnimatorコンポーネントについているAnimatorControllerになにか共通点はありますでしょうか、またついているでしょうか。 3) 他にエラーのメッセージは存在しないでしょうか。コンソールのログを含めて確認していただきたいです。 4) もし可能であれば再現可能なもののunitypackageを用意していただきたいです。

chigirits commented 4 weeks ago
  1. NDMF Console に表示されていたものをそのまま貼りました。
  2. ギリギリまで不要なものを削って試したのですが、どうやら以下の状況だと問題が起こるようです。
    • Animator の下に複数の Skinned Mesh Renderer がある
    • それらを AAO Merge Skinned Mesh で統合しようとしている(BlendShapeモードはどれを選択しても同様)
    • Animator に含まれる Animation Clip が、それらの Skinned Mesh Renderer のブレンドシェイプを個別に制御しようとしている
    • Animator コンポーネントを持つオブジェクトの有効状態が非表示に設定されている(子オブジェクトはすべて表示状態)
  3. Consoleでは以下のように表示されています。
    ArgumentException: asset is not temporary asset
    Parameter name: asset
    Anatawa12.AvatarOptimizer.AnimatorControllerMapper.ValidateTemporaryAsset (UnityEngine.Object asset) (at ./Packages/com.anatawa12.avatar-optimizer/Editor/ObjectMapping/ObjectMappingContext.cs:187)
    Anatawa12.AvatarOptimizer.AnimatorControllerMapper.FixAnimatorController (UnityEngine.RuntimeAnimatorController controller) (at ./Packages/com.anatawa12.avatar-optimizer/Editor/ObjectMapping/ObjectMappingContext.cs:192)
    Anatawa12.AvatarOptimizer.ObjectMappingContext.OnDeactivate (nadena.dev.ndmf.BuildContext context) (at ./Packages/com.anatawa12.avatar-optimizer/Editor/ObjectMapping/ObjectMappingContext.cs:81)
    nadena.dev.ndmf.BuildContext.Finish () (at ./Packages/nadena.dev.ndmf/Editor/API/BuildContext.cs:440)
    UnityEngine.Debug:LogException(Exception)
    nadena.dev.ndmf.ErrorReport:ReportError(IError) (at ./Packages/nadena.dev.ndmf/Editor/ErrorReporting/ErrorReport.cs:161)
    nadena.dev.ndmf.ErrorReport:ReportException(Exception, String) (at ./Packages/nadena.dev.ndmf/Editor/ErrorReporting/ErrorReport.cs:207)
    nadena.dev.ndmf.BuildContext:Finish() (at ./Packages/nadena.dev.ndmf/Editor/API/BuildContext.cs:450)
    nadena.dev.ndmf.VRChat.BuildFrameworkOptimizeHook:OnPreprocessAvatar(GameObject) (at ./Packages/nadena.dev.ndmf/Editor/VRChat/BuildFrameworkPreprocessHook.cs:86)
    VRC.SDKBase.Editor.BuildPipeline.VRCBuildPipelineCallbacks:OnPreprocessAvatar(GameObject)
    VRC.SDK3.Builder.VRCAvatarBuilder:ExportCurrentAvatarResource(Object, Boolean, Boolean, String&, Action`1, Action`1)
    VRC.SDK3.Builder.VRCAvatarBuilder:ExportAndTestAvatarBlueprint(GameObject)
    VRC.SDK3A.Editor.<Build>d__106:MoveNext() (at ./Packages/com.vrchat.avatars/Editor/VRCSDK/SDK3A/VRCSdkControlPanelAvatarBuilder.cs:2227)
    UnityEngine.UnitySynchronizationContext:ExecuteTasks()
  4. 販売アセットを使用しているため、すぐにはお渡しが難しそうです。2. のコメントでも追跡が困難なようでしたら、無料アセットで再現するか、販売アセットのギフトをお渡しすることでの対応を検討してみます。
anatawa12 commented 4 weeks ago

情報ありがとうございます。AvatarOptimizerのコンポーネントがすべてヒエラルキー上で非アクティブなGameObjectについている場合に一部のAAOの処理が通らなくなって不都合が発生したようでした。