ruyo / VRM4U

Runtime VRM loader for UnrealEngine5
Other
1.37k stars 179 forks source link

[UE4.27 (M1 Mac)] Xcode Build Error : Couldn't find target rules file for target 'ShaderCompileWorker' in rules assembly 'UE4Rules' #123

Closed SmileLabMYS closed 2 years ago

SmileLabMYS commented 2 years ago

Harube さん、初めまして。 Smile と申します。

下記などを参考に UE4.27.2 (macOS) で VRM4U プラグインを使おうとしたのですが、途中で問題が発生しました。 https://ruyo.github.io/VRM4U/03_mac/

ログや再現手順を記載しましたので、解決策をご教示いただけますでしょうか?


Describe the bug

Xcode で {Project}.xcworkspace をビルドすると、下記のエラーが発生し、ビルドに失敗します。


Screenshots, log

Build target VRM4UTest_Build_2022-01-29T11-52-17.txt

275行目に当該のエラーが出力されています。

また、エラーに影響しているか不明ですが、282行目に下記の警告が出力されています。


UnrealEngine Version:


Additional context : Other Softwares Version

その他の使用しているソフトなどのバージョンは、下記の通りです。


Additional context : Steps to reproduce

再現手順は、下記の通りです。

[1] assimp

  1. GitHub から assimp-5.0.1.zip をダウンロードする。
  2. CMake で Configure, Generate を実行する。
    • Where is the Source code : /Users/{User}/Documents/GitHub/assimp/assimp-5.0.1
    • Where to build the binaries : /Users/{User}/Documents/GitHub/assimp/assimp-5.0.1/build2
    • オプションはデフォルトのまま。
    • CMake 3.22.2 には、下記に記載されている ASSIMP_INSTALL というオプションは見当たらない。
  3. ターミナルで、assimp-5.0.1/build2 ディレクトリで、make コマンドを実行する。
    • assimp-5.0.1 ディレクトリに Makefile が存在しなかったため、Makefile が存在する assimp-5.0.1/build2 ディレクトリを使用する。
    • /assimp-5.0.1/build2/code ディレクトリに下記のファイルが作成される。
      • libassimp.5.0.0.dylib
      • libassimp.5.dylib (エイリアス。オリジナルは libassimp.5.0.0.dylib)
      • libassimp.dylib (エイリアス。オリジナルは libassimp.5.0.0.dylib)
    • 後の手順では、libassimp.5.0.0.dylib を libassimp.dylib にリネームして使用する。

[2] UE

  1. 下記をダウンロードしておく。
  2. UE4Editor で、Games > Blanck > C++ を選択し、プロジェクト ({Project}.uproject) を作成する。
    • {Project}/{Project}.xcworkspace も作成される。
  3. プロジェクトを一旦閉じる。
  4. {Project} ディレクトリに Plugins/VRM4U (VRM4U_4_27_20220128.zip) をコピーする。
  5. {Project}/Plugins/VRM4U ディレクトリを UnrealEngine_VRM4UPlugin-20220128/Plugins/VRM4U (UnrealEngine_VRM4UPlugin-20220128.zip) で置き換える。
    • Plugins/VRM4U/Source ディレクトリが追加される。
    • Plugins/VRM4U/ThirdParty ディレクトリに数ファイルが追加される。
  6. {Project}/Plugins/VRM4U/ThirdParty/assimp/lib/Mac ディレクトリに libassimp.dylib (libassimp.5.0.0.dylib をリネームしたファイル) をコピーする。
  7. UE4Editor でプロジェクトを起動する。
  8. VURM4U プラグインを有効化し、プロジェクトを再起動する。
  9. [Missing {Project} Modules] ダイアログで [Yes] をクリックし、リビルドする。
  10. [Error] ダイアログで [OK] をクリックする。

[3] Xcode

  1. Xcode で {Project}/{Project}.xcworkspace を開く。

  2. Games > {Project} に {Project}/Plugins ディレクトリをグループとして追加する。

    Xcode_20220129 -113930 Xcode_20220129-114225 Xcode_20220129-114925
  3. Product > Build する。

  4. ビルドエラーが発生し、ビルドが失敗する。


Additional context : References

ruyo commented 2 years ago

はじめまして。報告ありがとうございます。 対処は、おそらく2点あります。私はMacに詳しくないので的を外しているかもですが、ヒントにして追ってみてください。

  1. assimpをx86_64 でビルドする

ターミナルをRosettaを利用して開いてmakeしてください。x86_64としてビルドできると思います。 M1環境でそのままmakeすると、arm64版になってしまうので、そのエラーが出ているのだと思います。 参考:https://support.apple.com/ja-jp/HT211861 (cmakeのオプションで変更できるかもですが、あまり自信ありません。。)

  1. ShaderCompileWorkerを手動ビルドする

まずはじめに、、もし1の手順でプロジェクトのビルドが成功すれば、そのまま動くかもしれません。

この問題はおそらくVRM4Uとは関係なく、MacのC++プロジェクト設定によるものと思います。 エンジンごとビルドする場合は、ShaderCompileWorkerのみ手動ビルドが必要な場合があるようです。…が、ランチャ起動のUE4でもこの手順が必要なのかは いまいち不明です。 プロジェクトが起動しない場合は、試しに手動ビルドしてみてください。ビルド方法はいくつかあるようです。 参考:https://answers.unrealengine.com/questions/364089/unreal-411-source-custom-build-fails-to-launch-on.html

不明点あれば お気軽にどうぞ。

SmileLabMYS commented 2 years ago

返信ありがとうございます。 1 は解決して、2 が調査中です。


  1. assimpをx86_64 でビルドする

CMake, ターミナルともに Rosetta を使用して開けば、警告は表示されなくなりました。 ターミナルのみ Rosetta で開いた場合は、同様の警告が表示されていましたが、 CMake も Rosetta で開くことで、警告は表示されなくなりました。

解決策


  1. ShaderCompileWorkerを手動ビルドする

ターミナルで ShaderCompileWorker を手動ビルドしてみましたが、 依然として「ルールアセンブリ 'UE4Rules.dll' にターゲット 'ShaderCompileWorker' のターゲットルールファイルが見つからない」というエラーが出てる状態です。 UE4Rules.dll が作成される過程に問題がある気もしていますが、まだ分かっていません。

調査方法

[ 0.000] 0.000 0.062 FileMetadataPrefetch.QueueEngineDirectory() 0.102 XmlConfig.ReadConfigFiles() 0.905 SingleInstanceMutex.Acquire() 0.906 UEBuildPlatform.RegisterPlatforms() 0.907 0.001 Initializing InstalledPlatformInfo 0.971 0.065 Querying types 0.972 0.065 1.074 0.168 MacPlatformFactory 1.086 0.180 TVOSPlatformFactory 1.087 0.181 AndroidPlatformFactory 1.093 0.187 HoloLensPlatformFactory 1.093 0.187 IOSPlatformFactory 1.096 0.190 LinuxPlatformFactory 1.096 0.190 LuminPlatformFactory 1.096 0.190 WindowsPlatformFactory 1.109 TargetDescriptor.ParseCommandLine() 1.135 TargetMakefile.Load() 1.137 0.001 Checking dependent timestamps 1.137 UEBuildTarget.Create() 1.139 0.001 RulesCompiler.CreateTargetRulesAssembly() 1.139 0.001 0.000 1.289 0.151 0.150 Finding engine modules 1.318 0.180 0.179 Finding plugin modules 1.331 0.193 0.191 1.388 0.250 0.249 Finding program modules 1.395 0.257 0.255 Finding program targets 1.406 0.268 RulesAssembly.CreateTargetRules() 1.408 1.494 FileMetadataPrefetch.Stop() [ 1.499]

SmileLabMYS commented 2 years ago

追加で報告いたします。

  1. ShaderCompileWorkerを手動ビルドする

GitHub から UE のソースコードを取得して検証してみたところ、 ShaderCompileWorker に関するエラーは消えましたが、 Xcode ビルドには失敗している状況です。

以前からログに出力さていたようなのですが、 下記の 検証手順 に記載の通り、

という警告が出ています。

警告1はソースコードの修正が必要と思われますので、ご確認いただけますでしょうか? 警告2もソースコードの修正が必要なものでしょうか?

検証手順

  1. 下記に記載の手順を実行する。

  2. 起動した UE4Editor (4.27.2) でプロジェクトを作成する。

  3. (VRM プラグインの追加など)

  4. Xcode で {Project}.xcworkspace を開き、{Project}.uproject をビルドする。

  5. 下記のエラーは表示されないが、ビルドは失敗する。

    ERROR: Couldn't find target rules file for target 'ShaderCompileWorker' in rules assembly 'UE4Rules, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
  6. 2つの警告がエラーの原因? 以前のログも確認したところ、同様の警告が出ていたので、本手順には無関係の警告だと思われる。 Build target VRM4UTest2_Build_2022-01-30T13-47-00.txt

ruyo commented 2 years ago

色々情報ありがとうございます。 手元のMac環境でもビルドエラーになっていました。 警告の修正 &ライブラリをstatic link版に切り替えましたので、以下の手順で追ってみてください。手元では これでVRMインポートまで動作できました。

  1. 最新のVRM4Uソース、assimpソースを取得する

  2. cmakeで、BUILD_SHARED_LIBS を OFF にしてmakeする image

  3. makeで出力された assimp\build2\lib\libassimp.a を VRM4U\ThirdParty\assimp\lib\Mac\libassimp.a にコピー

  4. ランチャーからプロジェクトファイルを指定して起動。ダイアログからビルドすると、そのまま起動する。はず。

環境によるかもですが、手元ではXcodeでxcworkspaceを使ったビルドがうまく動かず、またcleanするとエディタごと起動不可になってしまい、UE4再インストールになってしまうようでした。 もしcleanしたい場合は VRM4U以下の Intermediate と Binariesを削除すればOKです。

うまく動作するようであれば ドキュメントを更新しておきます。

SmileLabMYS commented 2 years ago

深夜にも関わらず、返信ありがとうございます。

VRM4U 有効後に、Xcode ビルドなしでプロジェクトを再起動できました! vrm ファイルのインポートも成功です!

検証手順 は下記の通りです。 本件は解決しましたので、クローズいたします。

ご対応ありがとうございました!!!


検証手順 (成功)

[1] CMake 3.22.2

  1. 下記から [assimp-master.zip] をダウンロードする
  2. [Rosettaを使用して開く] = ON で CMake を 起動する
  3. ディレクトリを指定する
    • Source : /Users/{User}/Documents/GitHub/assimp/assimp
    • Build : /Users/{User}/Documents/GitHub/assimp/assimp/build2
  4. Configure ボタンをクリックする (ダイアログはデフォルトのまま)
  5. [BUILD_SHARED_LIBS] = OFF で Generate ボタンをクリックする

[2] ターミナル 2.12

  1. [Rosettaを使用して開く] = ON でターミナルを起動する
  2. assimp/build2 ディレクトリで make コマンドを実行する
  3. assimp/build2/lib/libassimp.a が作成される

[3] Unreal Editor 4.27.2

  1. 下記から [UnrealEngine_VRM4UPlugin-vrm4u_master.zip] をダウンロードする
  2. Epic Games Launcher から Unreal Editor を起動する
  3. Games > Blank > C++ を選択し、プロジェクト ({Project}.uproject) を作成する
  4. プロジェクトを一旦閉じる
  5. {Project} ディレクトリに UnrealEngine_VRM4UPlugin-vrm4u_master/Plugins をコピーする
  6. {Project}/Plugins/VRM4U/ThirdParty/assimp/lib/Mac ディレクトリに assimp/build2/lib/libassimp.a を コピーする
  7. Epic Games Launcher からプロジェクトを起動する
  8. VRM4U プラグインを有効にし、プロジェクトを再起動する
  9. [Missing {Project} Modues] ダイアログで Yes ボタンをクリックする
  10. [Starting build...] ダイアログが表示されるので、ビルドが完了するのを待つ
  11. プロジェクトが起動する!!!
  12. Content Browser に vrm ファイル (VRoidStudio 1.0.4 で作成) をドラッグ&ドロップする
  13. [VRM Import Options] ウィンドウで Import ボタンをクリックする UE427_20220131_1
  14. インポートできる!!! UE427_20220131_2