renderSetupですね。
renderLayerの頃に比べて、シーンを開いたらシーンがどんどん崩壊していくとかそういうのが無くなって
あぁこれで安定してレンダリングを回せるなぁって思ってた時期が僕にもありました。
実際に起きた状況をまとめるとこんな感じです。
- キャラなどのアセットデータをリファレンスしてシーンを構築
- 構築したシーンで renderSetupでレイヤーを構築
- アセットデータに不備があったので、元データの方でマテリアルのアサイン情報を修正
- レンダリングシーンを再度開いて確認する
- マテリアルの更新が反映されない
という状況ですねー。
あれー?更新したよなー?直ってないなー
という感じでデータを数往復し、色々調べてみた結果
renderSetupがなんかしてるわ
という結論に至りました。
再現
こんな感じでリファレンスしたシーンを用意しますね。
このシーン内でマテリアルOverrideをrenderSetupで作成します。
アサインが変わってないですね。
お約束のmaデータ解読してみると、なにか記載されてますねstringで。
詳しく
先述のサンプルシーンを元に詳しく挙動を確認しました。
- マテリアルoverrideが設定されているレイヤーに、カレントレイヤーを変更する。
- マテリアルoverride前の状態を再現する為に、ノードが作成され復元用情報が書き込まれる。
- デフォルトレイヤーに戻す。
- ノードに書き込まれた情報を元に状態を再現。
そして最後の挙動がreferenceEditに記載されています。
その為、リファレンスデータを切り替えても このreferenceEditの内容によってアサインが更新されてない様に見えてるようです。
かと言って、
レイヤーを切り替えた状態で リファレンスデータを切り替えたとしても、デフォルトレイヤーに戻した時点でノードから復元情報が呼び出されるのでやはり更新が反映されません。
無理やり
無理やりやるとしたら
- referenceEditの除去
- 復元用ノードの削除
のどちらかかなと思います。
- referenceEditの除去
該当行を選択し、removeを実行してみると
// Error: file: C:/Program Files/Autodesk/Maya2022/scripts/others/referenceEditsWindow.mel line 56: Cannot find the scene file.
うーん、一旦もう一個の方法を試してみます。
- 復元用ノードの削除
レイヤーを切り替えて、ノードを削除してみます。
cmds.delete(cmds.ls(type = "applyConnectionOverride"))
この状態でデフォルトレイヤーに戻してみると、
復元情報が呼び出されないのでオーバーライドの状態のままですね。
リファレンスデータの更新内容が無事反映されました。
もやもや
一応対応は出来たものの、別のバグを誘発しそうな気がしてもう少し良いやり方があるといいなぁ。
しかし、この仕様?は把握していないとレンダリング時の事故にもつながるので地味ですが怖いですね。
続きはこちら