ReinaS-64892 / TexTransTool

Non-destructive modification to Texture!
https://ttt.rs64.net
Other
67 stars 6 forks source link

特定の衣装で特定のマテリアルをアトラス化のターゲットにした場合にKeyNotFoundExceptionが発生する #436

Closed mecaota closed 3 months ago

mecaota commented 4 months ago

概要

P_Store様のPenyBlack( https://booth.pm/ja/items/5269753 )のマテリアルのうち、 b_不透明 をターゲットに選択した場合にのみ、KeyNotFoundExceptionが発生します。どうように、 d_半透明 というマテリアルをターゲットにした場合にも、NDMFエラー画面が表示されます(特にメッセージやログは吐かれず)

エラーログ等

b_不透明 をターゲットに選択した場合のエラーログ

System.Collections.Generic.KeyNotFoundException: The given key 'net.rs64.TexTransTool.TextureAtlas.AtlasIslandID' was not present in the dictionary.
  at System.Collections.Generic.Dictionary`2[TKey,TValue].get_Item (TKey key) [0x0001e] in <eef08f56e2e042f1b3027eca477293d9>:0 
  at net.rs64.TexTransTool.TextureAtlas.AtlasTexture.TryCompileAtlasTextures (net.rs64.TexTransTool.IDomain domain, net.rs64.TexTransTool.TextureAtlas.AtlasTexture+AtlasData& atlasData) [0x005c0] in .\Packages\net.rs64.tex-trans-tool\Runtime\TextureAtlas\AtlasTexture.cs:203 
  at net.rs64.TexTransTool.TextureAtlas.AtlasTexture.Apply (net.rs64.TexTransTool.IDomain domain) [0x0003d] in .\Packages\net.rs64.tex-trans-tool\Runtime\TextureAtlas\AtlasTexture.cs:494 
  at net.rs64.TexTransTool.TexTransBehaviorUtility.Apply (net.rs64.TexTransTool.TexTransBehavior texTransBehavior, net.rs64.TexTransTool.IEditorCallDomain domain) [0x00015] in .\Packages\net.rs64.tex-trans-tool\Editor\Utils\TexTransBehaivorUtility.cs:12 
  at net.rs64.TexTransTool.Build.AvatarBuildUtils+TexTransBuildSession+<>c__DisplayClass9_0.<ApplyFor>b__0 () [0x00000] in .\Packages\net.rs64.tex-trans-tool\Editor\Build\AvatarBuildUtils.cs:84 
  at nadena.dev.ndmf.ErrorReport.WithContextObject (UnityEngine.Object obj, System.Action action) [0x00015] in .\Packages\nadena.dev.ndmf\Editor\ErrorReporting\ErrorReport.cs:300 
  at net.rs64.TexTransTool.TTTLog.ReportingObject (UnityEngine.Object obj, System.Action action) [0x00000] in .\Packages\net.rs64.tex-trans-tool\Editor\ErrorReporting\TTTLog.cs:65 
  at net.rs64.TexTransTool.Build.AvatarBuildUtils+TexTransBuildSession.ApplyFor (net.rs64.TexTransTool.TexTransPhase texTransPhase) [0x00057] in .\Packages\net.rs64.tex-trans-tool\Editor\Build\AvatarBuildUtils.cs:84 
  at net.rs64.TexTransTool.Build.NDMF.UVModificationPass.Execute (nadena.dev.ndmf.BuildContext context) [0x00000] in .\Packages\net.rs64.tex-trans-tool\Editor\Build\NDMF\TTTPass.cs:58 
  at nadena.dev.ndmf.Pass`1[T].nadena.dev.ndmf.IPass.Execute (nadena.dev.ndmf.BuildContext context) [0x00000] in .\Packages\nadena.dev.ndmf\Editor\API\Fluent\Pass.cs:64 
  at nadena.dev.ndmf.ConcretePass.Execute (nadena.dev.ndmf.BuildContext context) [0x00000] in .\Packages\nadena.dev.ndmf\Editor\API\Solver\PluginResolver.cs:36 
  at nadena.dev.ndmf.BuildContext.RunPass (nadena.dev.ndmf.ConcretePass pass) [0x00124] in .\Packages\nadena.dev.ndmf\Editor\API\BuildContext.cs:350 
  at System.Collections.Generic.Dictionary`2[TKey,TValue].get_Item (TKey key) [0x0001e] in <eef08f56e2e042f1b3027eca477293d9>:0 
  at net.rs64.TexTransTool.TextureAtlas.AtlasTexture.TryCompileAtlasTextures (net.rs64.TexTransTool.IDomain domain, net.rs64.TexTransTool.TextureAtlas.AtlasTexture+AtlasData& atlasData) [0x005c0] in .\Packages\net.rs64.tex-trans-tool\Runtime\TextureAtlas\AtlasTexture.cs:203 
  at net.rs64.TexTransTool.TextureAtlas.AtlasTexture.Apply (net.rs64.TexTransTool.IDomain domain) [0x0003d] in .\Packages\net.rs64.tex-trans-tool\Runtime\TextureAtlas\AtlasTexture.cs:494 
  at net.rs64.TexTransTool.TexTransBehaviorUtility.Apply (net.rs64.TexTransTool.TexTransBehavior texTransBehavior, net.rs64.TexTransTool.IEditorCallDomain domain) [0x00015] in .\Packages\net.rs64.tex-trans-tool\Editor\Utils\TexTransBehaivorUtility.cs:12 
  at net.rs64.TexTransTool.Build.AvatarBuildUtils+TexTransBuildSession+<>c__DisplayClass9_0.<ApplyFor>b__0 () [0x00000] in .\Packages\net.rs64.tex-trans-tool\Editor\Build\AvatarBuildUtils.cs:84 
  at nadena.dev.ndmf.ErrorReport.WithContextObject (UnityEngine.Object obj, System.Action action) [0x00007] in .\Packages\nadena.dev.ndmf\Editor\ErrorReporting\ErrorReport.cs:295 

d_半透明 をターゲットに選択した場合のNDMFエラーレポート

image
mecaota commented 4 months ago

衣装お持ちじゃなければギフトします

ReinaS-64892 commented 4 months ago

その衣装は持っていないので確たることではないですが、それが v0.6.4であれば、サブメッシュ間で共通の頂点を使用しているメッシュがアトラス化対象になっているように見えます。

前者(b_不透明)のエラーは、サブメッシュ間で共通の頂点を使用しているケースの一時的な回避処理が正しく動いていないようですね。 後者(d_半透明)は、回避処理は正しく動き、おそらくそのことへの警告が表示されているようですが、ローカライズ周りのバグで正しく表示されていませんね...

v0.7.0-beta.x では、その問題に対して一時的な回避処理ではなく、完全な回避処理が入っているのでそのバージョンで正しく処理できているかが気になります!

mecaota commented 3 months ago

0.7.1で修正確認できたので、closeします