今回の現象
モデラーから来たデータをopen/import すると特定のマテリアルが剥げる。
状況確認
モデラーに確認しつつ整理
ファセットアサインを使っている部分が剥げる
オブジェクトを複製して保存すると複製した奴は剥げない
これらを見るに・・・・・
groupIdがどこかで欠損していると予想
マテリアルが剥げたデータを確認すると、
ファセットアサインに使用されている groupIdが一部欠損している
問題はどこで欠損したか・・・
なんやかんやで色々調べてみたところ、ハイパーシェーダーの挙動によって消えてしまっていた。
挙動としては
ファイルを開く (まだ無事
ハイパーシェーダーを開く (まだ無事
ファイルを保存する (ここでコネクト外れる
または
ファイルを開く (まだ無事
ハイパーシェーダーを開く (まだ無事
ハイパーシェーダーを閉じる (ここでコネクト外れる
ファイルを保存する際にも ハイパーシェーダーを閉じる と同等の処理が走っているようで、どうやら ハイパーシェーダーを閉じる という挙動に原因がある様子。
前後でデータを見比べると・・・・・
nodeGraphEditorInfo の数が増減している
ノードエディターとかハイパーシェーダーの グラフエディター部分の情報保持用で、
本来は1つあれば十分なのにやたらといっぱいある
元々こんな感じにあったのが
nodeGraphEditorInfo
nodeGraphEditorInfo2
ハイパーシェーダーを閉じる と
nodeGraphEditorInfo
こんな感じに減る
groupIdは結構いろんなところで使用されてて、このグラフエディターの表示にも流用されている様子。これが問題。
ファイルを開いた際に、
nodeGraphEditorInfo2がカレントに指定されていて読み込まれる
nodeGraphEditorInfo2 には ファセットアサインを使用したネットワーク全体が登録されている
ハイパーシェーダーを閉じる際に、nodeGraphEditorInfo2の情報nodeGraphEditorInfoに統合する処置が走る。
nodeGraphEditorInfo2が削除される際に、nodeGraphEditorInfo2につながっている groupIdはグラフエディタのフィルターとして認識され一緒に削除されてしまう。
ファセットアサインのgroupIdもこの挙動に巻き込まれて削除されてしまう。
このまま保存すると、再度openしたときにマテリアルが剥げてしまう。
今回の対策
ハイパーシェーダーを開く前にnodeGraphEditorInfoにつながってる groupIdを引っこ抜いておく
そもそもファセットアサインを使用しないのが最高なのだけども、諸般の事情から無理なそうなので
社内ファイルブラウザーの open/import挙動に上記の処理を仕込んでおくことで対策。