NVIDIA版unreal Engine(NvRTX)のエラーを撲滅していく。
NvRTXって?
一言で言うと、Unreal Engineのソースコードをフォークして光や水面の表現が強化されたunreal Engineです。
ここにソースコードがアップされています。
プライベートなリポジトリなのでここを参考にアカウント接続しないと404エラーが出ます。
自分は、NvRTX_Caustics-5.1を使用しました。
セットアップ手順
Githubにも書いてありますが、以下の手順です。
Visual Studio Community 2022をインストールします。
→Githubには2019と書いてありますが、2022をインストールします。
UE5 開発に適したコンポーネントをインストールするには、「C++ によるゲーム開発」ワークロードにチェックが入っていることを確認します。右側の「インストールの詳細」セクションで、次のコンポーネントも選択します:
・C++プロファイリングツール
・C++ AddressSanitizer (オプション)
・Windows 10 SDK (10.0.18362 またはそれ以降)Windows エクスプローラでフォルダを開き、Setup.bat を実行します。
GenerateProjectFiles.bat を実行します。
UE5.sln が作成されるのでダブルクリックして開きます。
ソリューション構成を Development Editor に、ソリューションプラットフォームを Win64 に設定し、ソリューションエクスプローラーのUE5 を右クリックして Build を選択します。
スタートアッププロジェクトを UE5 に設定し、F5 を押してデバッグを開始すれば、Visual Studio からエディタを実行できます。
Visual Studioを2019から2022に変更する以外にも、その通りにやるとビルド出来なかったので、以下にエラーの対処法を書いていきます。
■Setup.bat実行後に出るエラー
●Thread abort is not supported on this platform. ・・・
下記画像のように、エラーが出ます。現環境の.NETのバージョンだとThread.Abortが非推奨ということです。代わりにCancellationTokenを使ってくださいとのことです。
方法
Visual Studio 2022をインストール。
Visual studio installer →個別のコンポーネント→.NET SDKにチェックを入れてインストール。
UnrealEngine-NvRTX_Caustics-5.1\Engine\Source\Programs\GitDependencies\GitDependencies.csprojをVisual studio 2022で開く。
UnrealEngine-NvRTX_Caustics-5.1\Engine\Source\Programs\GitDependencies\Program.csの1088行あたりで下記を参考にAbortが例外を出すので、推奨されているCancellationTokenに変更。
Visual Studio 2022のメニューバーのビルド→ソリューションのビルドでビルドを開始する。Developmentと Any CPUとした。
UnrealEngine-NvRTX_Caustics-5.1\Engine\Source\Programs\GitDependencies\bin\Development にビルド結果ができる。
UnrealEngine-NvRTX_Caustics-5.1\Engine\Binaries\DotNET\GitDependencies\win-x64にコピペ。
●The remote server returned an error: (403) Forbidden. (WebException)
下記画像のようにエラーが出ます。自分の場合は、プロキシを通すことでエラーを回避できました。
方法
Setup.batを編集で開いて、以下を@echoの次の行に追加。http以下は、それぞれのプロキシのURLに置き換えてください。
set HTTP_PROXY=http://proxy.jp
set HTTPS_PROXY=http://proxy.jp
2.Setup.batを管理者で実行。画面が自動的に消えるまで待つ。
■GenerateProjectFile.bat実行時のエラー
●Error nu1301: https://www.nuget.org/api/v3/index.json ソースのサービスインデックスを読み込めません。
このエラーもプロキシを通してないことで出る。
方法
C:\Users\[UserName]\AppData\Roaming\NuGet\Nugget.Configを開き、valueのところは自分のプロキシのURLにする。
<configuration>
<config>
<add key="http_proxy" value="http://proxy_hostname_or_ip:3128" />
<add key="https_proxy" value="http://proxy_hostname_or_ip:3128" />
</config>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
</packageSources>
</configuration>
■Visual StudioでUE5をビルド時のエラー
●LINK1104 "UnrealEditor-ConcertClientSharedSlate-Win64-Debug-supported.exp”が見つかりません。
下記のようなエラーが出る。
LINK1104 "UnrealEngine-nvrtx-5.1\Engine\Plugins\Developer\Concert\ConcertUI\ConcertClientSharedSlate\Intermediate\Build\Win64\UnrealEditor\Debug\ConcertClientSharedSlate\UnrealEditor-ConcertClientSharedSlate-Win64-Debug-supported.exp”が見つかりません。
方法
UnrealEngine-nvrtx-5.1engine\Binaries\Win64を削除する。ビルド時かGenerateProjectFile.bat起動時に再生成される。
●LNK1181 'OpenColorIO.lib' を開けません。
下記のようなエラーが出る。OpenColorIO.libがなぜか生成されていないので、"D:\UnrealEngine-NvRTX_Caustics-5.1\Engine\Plugins\Compositing\OpenColorIO\Source\ThirdParty\OpenColorIO\BuildForWindows.bat"を使用して生成する。
●LNK1181 'D:\UnrealEngine-NvRTX_Caustics-5.1\Engine\Plugins\Compositing\OpenColorIO\Source\ThirdParty\OpenColorIO\Deploy\OpenColorIO-2.1.0\lib\Win64\OpenColorIO.lib' を開けません。
方法
BuildForWindows.batは、CMakeとgitがインストールされ、環境変数に登録されていることが前提になっている。CMakeは、Visual studio installerにある[C++によるデスクトップ開発]に同梱されているため、これをインストールする。
gitも環境構築する。自分は環境構築せずに、GithubからDownload Zipした。
環境構築しなかったので、BuildForWindows.batから必要な部分だけ抜き出し、コマンドプロンプトで実行する。2でダウンロードしたファイルを解凍し、そのパスまでコマンドプロンプトでcd(Change Directory)する。
下記2つを順番にコマンドプロンプトに貼り付けて実行する。最初の部分のcmakeは、環境変数に登録していない場合は以下に置き換える。
C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe
cmake -S . -B build -G "Visual Studio 17 2022" -A x64 -DBUILD_SHARED_LIBS=ON -DOCIO_BUILD_STATIC=OFF -DOCIO_BUILD_TRUELIGHT=OFF -DOCIO_BUILD_APPS=OFF -DOCIO_BUILD_GPU_TESTS=OFF -DOCIO_BUILD_NUKE=OFF -DOCIO_BUILD_DOCS=OFF -DOCIO_BUILD_TESTS=OFF -DOCIO_BUILD_PYGLUE=OFF -DOCIO_BUILD_JNIGLUE=OFF -DOCIO_STATIC_JNIGLUE=OFF -DOCIO_USE_BOOST_PTR=OFF -DOCIO_PYGLUE_LINK=OFF -DCMAKE_INSTALL_PREFIX:PATH=.\install
cmake --build build --config Release --target INSTALL
5.OpenColor-2.1.0\build\install\lib\OpenColorIO.libが出来るので、UnrealEngine-NvRTX_Caustics-5.1\Engine\Plugins\Compositing\OpenColorIO\Source\ThirdParty\OpenColorIO\Deploy\OpenColorIO-2.1.0\lib\Win64\OpenColorIO.libにコピペする。
● IDE0003 名前を簡素化できます
方法
エラーが出ているファイルを開き、下記を追加する。
#pragma warning disable IDE0003
● IDE0025 プロパティに式本体を使用する
方法
エラーが出ているファイルを開き、下記を追加する。
#pragma warning disable IDE0027
●LNK2019 未解決の外部シンボル NvAPI_D3D12_GetRaytracingCaps が関数 "public: virtual void __cdecl FD3D12DynamicRHI::Init(void)" (?Init@FD3D12DynamicRHI@@UEAAXXZ) で参照されました
方法
恐らく宣言されているNvAPI_D3D12_GetRaytracingCapsが定義されていないためにエラーが出ています。直し方が分からなかったので、以下のソースコードのNvAPI_D3D12_GetRaytracingCapsをコメントアウトして対応しました。
UnrealEngine-NvRTX_Caustics-5.1\Engine¥Source¥ThirdParty¥NVIDIA¥napier.h
NVAPI_INTERFACE NvAPI_D3D12_GetRaytracingCaps(
__in ID3D12Device* pDevice
__in MvAPI_D3D12_RAYTRACING_CAPS_TYPE type,
__out void* pData,
__in size_t dataSize);
Engine¥Source¥Runtime¥D3D12RHI¥Private¥Windows¥D3D12Device.cpp
NvStatusSER =NvAPI_D3D12_GetRaytracingCaps(
GetAdapter().GetD3DDevice(),
NVAPI_D3D12_RAYTRACING_CAPS_TYPE_THREAD_REORDERING
&ReorderCaps,
sizeof(ReorderCaps));
まとめ
以上の対処法で、NvRTX版UE5が起動でき、デフォルトのUE5では出来ない光の表現も出来ていることも確認しました。