お世話になっております。
*Interchange.FeatureFlags.Import.FBXをtrueにした状態で、*ImportAssetsCommandletを使用してSkeltalMeshを含んだFbxをインポートをすると、変換後のアセットがある場合とない場合で挙動が変わってしまします。
KeepSectionsSeparateを有効にしてImportAssetsCommandletを実行すると、アセットがない場合は、MaterialSlotNameがメッシュ名 + 数値となり、アセットがある場合は、MaterialSlotNameがFbx内にあるマテリアル名になってしまいます。
こちらの件について、なにか対処方法等ありましたら、ご教授頂けると幸いです。
以上です。宜しくお願い致します。
再現手順
1.Interchange.FeatureFlags.Import.FBXをtrueにした状態で ImportAssetsCommandletを使用してSkeltalMeshを含んだFbxをインポートをする。
その際に、KeepSectionsSeparateを有効にする。
2.変換後のアセットがある場合とない場合で、MaterialSlotNameで違うことを確認する。
適当なスケルタルメッシュ用のFBXを用意して、エディタ上で一旦インポートしその際KeepSectionsSeparateを設定、
次にImportAssetsCommandletを使って再インポートしてみましたが、特にMaterialSlotNameに差が発生しません。
通常FBX内のマテリアル名がそのままMaterialSlot名になると思います。したがって
> アセットがない場合は、MaterialSlotNameがメッシュ名 + 数値となり
この部分が不適切な動作に見えるのですが、この挙動を再現できていません。この問題がおきるマテリアルスロットは KeepSectionsSeparate で影響を受ける重複したマテリアルスロットだけで発生し、KeepSectionsSeparateのチェックを外せば問題を回避できたりしますか?
もし特定のマテリアルを持つFBXでのみ問題が起きるようであれば、再現のためにこの問題の検証用に使っているFBXを頂戴できるとありがたいです。
またインポートする場合の操作に差がある可能性があります。初回からImportAssetsCommandletを使って新規にメッシュをインポートする場合、KeepSectionsSeparateを手動で設定するインターフェイスは無くデフォルトのパイプラインの値が設定されると思うのですが、ここで具体的にどのような操作を行っているかご説明頂いてもよろしいでしょうか?
>通常FBX内のマテリアル名がそのままMaterialSlot名になると思います。
こちらについては、ImportAssetsCommandletで生成されるアセットがない場合はMaterialSlotNameがメッシュ名 + 数値になっているようです。
>またインポートする場合の操作に差がある可能性があります。初回からImportAssetsCommandletを使って新規にメッシュをインポートする場合、KeepSectionsSeparateを手動で設定するインタ>ーフェイスは無くデフォルトのパイプラインの値が設定されると思うのですが、ここで具体的にどのような操作を行っているかご説明頂いてもよろしいでしょうか?
DCCツールからjsonを作成して、UE5に通信でImportAssetsCommandletを実行しております。
ImportAssetsCommandletのコードを追っている感じですと、jsonの[SkeletalMeshImportData]ノード内に、[bKeepSectionsSeparate]がある場合は設定されているようですので、それを使用しております。これを設定している場合に、生成されるアセットがない場合は、[bKeepSectionsSeparate]が有効になって、通常のインポートが実行されているようです。
ただ、生成されるアセットがすでにある場合は、Reimportが実行され、その際には[bKeepSectionsSeparate]が無効化されているようです。
ご返答ありがとうございます。
こちらでは問題が再現できていないのですが、初回インポート時のみ旧来の非interchangeのパスを通っている可能性があります。
ImportSettingをjsonで渡す場合にFactoryNameに"FbxFactory"の指定があるとInterchangeが無効化されてしまいます。(UAssetToolsImpl::ImportAssetsInternalの冒頭でbUseInterchangeFrameworkの判定が行われていることをご確認ください)
警告は出ますがFactoryNameを消して検証していただけますでしょうか。
Interchangeが使われる場合、恐らくjson中のKeepSectionsSeparateは無視されるはずです。その場合はパイプラインアセットに初期設定を加えるかインターチェンジパイプラインブループリントで任意のフラグを自動的に与えられるようにする必要があります。
もし解決に至らないようであれば再現のためにfbxと設定json及びコマンドレットのコマンドラインをご用意いただきたいです。
ご指示の通り、ImportSettingをjsonで渡す場合にFactoryNameに"FbxFactory"がある場合は、Interchangeが無効化されていることを確認しました。
ただ、FbxFactoryがないと、ImportSettingのマテリアルや物理アセットなどの様々なパラメータが無効化されてしまっているようです。
また、再インポート時はFactoryNameに"FbxFactory"の有無にかかわらず、Interchangeが有効になってしまうようでした。
ImportAssetsCommandletをでInterchangeのパスを使用する場合は、今後もKeepSectionsSeparateなどの一部のパラメータは有効にならないという認識でいいのでしょうか?
ご確認ありがとうございます。初回インポート時の問題を識別することが出来ました。
> ImportAssetsCommandletをでInterchangeのパスを使用する場合は、今後もKeepSectionsSeparateなどの一部のパラメータは有効にならないという認識でいいのでしょうか?
はい。jsonを通じて設定を渡すことはできません。代わりにInterchangeのパイプライン設定からデフォルト値を読み込んで適用するかパイプラインアセットを通じて動的にパラメータを自動設定するようにすることもできます。詳しくは以下のページをご覧ください。
https://dev.epicgames.com/documentation/ja\-jp/unreal\-engine/importing\-assets\-using\-interchange\-in\-unreal\-engine