# カスタムビルド

このページでは、カスタムUE5ビルドにDashをインストールする手順を説明します。いくつか注意点があります：

* DashはUE5.1以降でのみ互換性があります。
* ほとんどの場合、手順は比較的簡単ですが、カスタムUE5ビルドがベースのエンジンソースから大幅に変更されている場合、いくつか問題が発生する可能性があるため、<info@polygonflow.io>までご連絡いただくことをお勧めします。
* 通常、企業には共有Slackチャネルへの招待を行い、そこでライブでガイダンスを提供したり、アーティストと直接フィードバックのやり取りを行ったりしています。ぜひご連絡ください！
* クラッシュレポート、解析、AI機能などをオフにするには、特定の環境変数を設定できます。このトピックの詳細は後述します。 \ <br>

それでは、本題に入りましょう。

ビルド方法は2つあります。1つ目がプラグインビルド、2つ目がソースビルドです。両方のファイルはこのGoogleドライブにあります： [polygonflow.io/latest-source-build](https://www.polygonflow.io/latest-source-build)、以下の異なる手順を確認して好みのビルド方法を選択できます。

## ビルド方法：

<details>

<summary>オプション1：プラグインビルド手順</summary>

これは通常のUnreal Engineプラグイン構造であるため、最もシンプルな配備モードです。 [Epic Gamesプラグインガイド](https://dev.epicgames.com/documentation/en-us/unreal-engine/plugins-in-unreal-engine) は通常どおり適用できます。

まず、Google DriveのPlugin Buildフォルダを開き、 [Google Drive](https://www.polygonflow.io/latest-source-build) そしてインストールしたいDashのバージョンに対応するフォルダを開きます。ここにはサポートする各UEバージョンごとに1つのzipがあり、使用しているUEバージョンに対応するzipのみをダウンロードすればよいです。

zipをダウンロードして解凍したら、Dashフォルダを次の場所に配置できます： `PROJECT_ROOT/Plugins` または `ENGINE_ROOT/Engine/Plugins` と、次の説明のとおりです： [plugins guide](https://dev.epicgames.com/documentation/en-us/unreal-engine/plugins-in-unreal-engine#pluginfolders).

### Python依存関係のインストール

DashのPythonコードは次に格納されています： `PLUGIN_ROOT/Content/Python` これはUnrealのPythonで自動的に利用可能になります。 `init_unreal.py` は修正を必要とせず、すべてのユーザーに対して常に有効です。

Dashプラグインをインストールした後にUnreal Engineを初めて起動すると、DashはPython依存関係を次にインストールします： `PLUGIN_ROOT/Content/Python/Plugins/UnrealEngineContext/Imports/311/` Unreal Engine 5.4+用、そして `PLUGIN_ROOT/Content/Python/Plugins/UnrealEngineContext/Imports/39/` Unreal Engine 5.1-5.3用にそれぞれインストールされます。

これはプロジェクトごとに1回発生します（Dashがプロジェクトごとにインストールされている場合）。またはエンジンバージョンごとに1回発生します（Dashがエンジンにインストールされている場合）。ディスクスペースを節約するために、Dashは次の場所にインストールすることを推奨します： `Engine/Plugins`。例としてのエンジンパス： `ENGINE_ROOT/Engine/Plugins/GraphNUnrealPlugin`, `ENGINE_ROOT/Engine/Plugins/Polygonflow/GraphNUnrealPlugin`, `ENGINE_ROOT/Engine/Plugins/Whatever/GraphNUnrealPlugin`.

### ディスク使用量

Dashプラグインのサイズは `約1GB` インストール直後は、Python依存関係がインストールされると合計サイズは `約3GB`になります。さらに、Dashはアセットのサムネイル画像などのアセットメタデータをダウンロードするため、もう少し増える可能性があります。

### コンパイル

Dashプラグインは通常のUnreal Engineコードプラグイン構造に準拠しており、C++プロジェクト内でコンパイルすることも、 [unreal automation scriptsを使用する](https://dev.epicgames.com/community/learning/tutorials/qz93/unreal-engine-building-plugins)か、または `Tools→Plugins` メニューの「Package」ボタンを使用してビルドすることもできます。これによりユーザーはカスタムエンジン向けにDashをビルドできます。

### アンインストール

GraphNUnrealPluginフォルダを次から削除するだけです： `Engine/Plugins` または `PROJECT_ROOT/Plugins`

また、次も削除してください： `Documents/Polygonflow` フォルダ

</details>

<details>

<summary>オプション2：ソースビルド手順</summary>

このビルドオプションでは、まずSource Buildフォルダを開き、 [Google Drive](https://www.polygonflow.io/latest-source-build) そしてインストールしたいDashのバージョンのzipをダウンロードします。 <br>

このZIPファイルには以下が含まれています：

* **Dash**：このフォルダにはインストーラーからコピーされたファイルが格納されています。インストールせずにバージョン管理や共有フォルダを通じてプラグインを配布することができます。
* **GraphNUnrealPlugin**：このディレクトリには、カスタムエンジンビルドにDashを統合するために必要なC++コードが含まれています。
* **init\_unreal.py**：もし全てのアーティストのマシンにDashをインストールしない選択をする場合、この開発者ファイルがプラグインのPython部分を開始するエントリーポイントとして機能します。<br>

それではビルドの時間です！

1. 新しいUnreal C++プロジェクトを作成します
2. プラグインをプロジェクトの `Plugins` フォルダに配置します（まだ存在しない場合はPluginフォルダを作成）。結果は次のようになります： `Plugins\\GraphNUnrealPlugin`
3. ZIPに同梱されている `init_unreal.py` をプロジェクト内にコピーします `Plugins/GraphNUnrealPlugin/Content/Python` プラグインが `Dash` とそのライブラリを認識できるようにするため、そうしないと次のようなエラーが発生します： `ModuleNotFoundError: No module named 'GN'`
4. ファイルの末尾にあるパスを編集し、プラグインを配布する場合は配置したDashフォルダの場所に、インストーラーを使用している場合はインストールディレクトリに設定します。`init_unreal.py` ファイルの末尾にあるパスを編集し、プラグインを配布する場合は配置したDashフォルダの場所に、インストーラーを使用している場合はインストールディレクトリに設定します。
5. .uprojectファイルをエクスプローラーで右クリックして「Generate Visual Studio project files」を選択し、Visual Studioプロジェクトを生成します

<figure><img src="https://1281618638-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYp9tAkqjcwFDufAaviIa%2Fuploads%2FWLY6Ut8LUYJyIz8gBhBI%2Fbuild_solution.png?alt=media&#x26;token=e365a991-179f-464c-96a3-56f748b707fe" alt=""><figcaption><p>右クリックしてプロジェクトファイルを生成します</p></figcaption></figure>

6. Visual StudioまたはRiderでソリューションを開き、そこからビルドします。詳細は [公式ドキュメント](https://docs.unrealengine.com/5.0/en-US/setting-up-visual-studio-development-environment-for-cplusplus-projects-in-unreal-engine/).

### Pythonからの利用

プラグインはいくつかの機能をPythonインタプリタに公開しており、UnrealにPythonスタブを生成させてIDEで読み込めるようにすることができます。

1. Unreal Engineを開き、プラグインを有効化します。これにより次が有効になります： **Python Script Plugin** および **Editor scripting utilities** プラグイン
2. プロジェクト設定に移動して開発者モードを有効にします

<figure><img src="https://1281618638-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYp9tAkqjcwFDufAaviIa%2Fuploads%2F4gw2sLtrwZDnMaxDfDQB%2Fdev_mode.png?alt=media&#x26;token=2d7e8ac0-3bb4-4d06-87b6-57b876d5669a" alt=""><figcaption><p>開発者モードは自動補完のためのPythonスタブを生成します</p></figcaption></figure>

3. エディタを再起動します。
4. を確認してください： `PROJECT_ROOT/Intermediate/PythonStub/unreal.py`
5. このファイルをIDEに追加すると、エクスポートされた関数でオートコンプリートが利用できます

</details>

## バージョン管理から除外する項目

<details>

<summary>両方のビルドタイプでバージョン／ソース管理から除外可能なファイル：</summary>

* `Plugins/UnrealEngineContext/Imports/thirdparty` （約2GB）- このフォルダはユーザーマシンごとに作成され、Pythonパッケージを含みます
* `Modules/GN/ContentLibrary/Backends/IESLibrary/IesLibraryContents` （約28MB）- このフォルダは同じフォルダにある `IesLibraryContents.zip` から抽出されます
* `ThirdPartyLicenses`  - 機能には影響しません、任意です
* `__pycache__`  - Pythonによって生成されます
* `*.pyc`  - Pythonによって生成されます
* `*.pdf`  - EULAなどの法的文書、任意
* `*.md`  - 法的文書や内部ドキュメント、任意

</details>

## Dash 環境変数

<details>

<summary>Dash 環境変数の説明</summary>

特定の環境変数を設定することで、Dash内の特定の機能やオプションを制御できます。「1」「yes」または「true」を使用するとすべて `true`.&#x20;

<figure><img src="https://1281618638-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYp9tAkqjcwFDufAaviIa%2Fuploads%2FJBYbajoOqPbIJlXBweaT%2Fimage.png?alt=media&#x26;token=f8d4040e-28f2-4218-b243-104bff9c1acf" alt=""><figcaption></figcaption></figure>

### DASH\_CRASH\_REPORT\_ENABLED

ファイルパスを含む可能性のあるクラッシュレポートの有効化／無効化。 既定値 = `有効`.

### **DASH\_UPDATE\_CHECK\_ENABLED**

起動時の更新チェックを有効または無効にします。更新チェックはDashが初めて表示されるUnrealエディタセッションごとに1回行われます。Dashは最新バージョン情報を取得するためにCloudflareサーバーへリクエストを行います。 既定値 - `有効`

### **DASH\_ANALYTICS\_ENABLED**

Dashの使用状況テレメトリを有効または無効にします。Dashは使用データを定期的に当社のMongoDBクラスタへ送信します。既定値 - `有効`

### **DASH\_REGISTER\_PREFERENCES\_FOR\_ANALYTICS**

有効にすると、解析オプションを制御するトグルがDashの設定UIに追加されます。 既定値 - `有効`

### **DASH\_OPEN\_AI\_ENABLED**

当社のOpenAI Enterprise APIアカウントを通じたAIアシスタントおよびAIアセットタグ付けを有効または無効にします。既定値 - `有効`

### **DASH\_REGISTER\_PREFERENCES\_FOR\_OPEN\_AI**

有効にすると、OpenAI Enterprise APIを使用したAI機能を有効にするトグルオプションがDashの設定UIに追加されます。\
既定値 - `有効`

</details>

## よくある質問

<details>

<summary>アクセス拒否／読み取り専用／書き込み保護ファイル - リビジョン管理の問題</summary>

metadata.jsonファイルに関する読み取り／書き込みやアクセス拒否のエラーが表示される場合、次の2つの方法を試すことができます：<br>

1. Windows 11でWindows Defenderが追加するDocumentsフォルダの自動書き込み保護（「保護されたフォルダ」）をオフにします。
2. metadata.jsonやその他のDashファイルをPerforceなどのリビジョン管理下で常に書き込み可能としてマークし、インストール手順を最初からやり直します。&#x20;

</details>

<details>

<summary>プラグインを各マシンでコンパイルする必要がありますか？</summary>

いいえ。ビルドしたのと同じエンジンバージョンを使用している各マシンに対して、事前にビルドされたC++プラグインを配布できます。

</details>

<details>

<summary><strong>プラグインをすべてのアーティストのマシンにインストールする必要がありますか？</strong></summary>

動作するために、Dashには2つのコンポーネントが必要です：

* Unreal C++プラグイン
* Dash Pythonプラグイン

プラグインをすべてのアーティストのマシンにインストールするか、カスタムビルドされたC++プラグインとともにバージョン管理で直接配布することができます。

</details>

<details>

<summary>C++プラグインの依存関係は何ですか？</summary>

C++レイヤーの依存関係は次のとおりです：

Microsoftのメモリライブラリ（Unrealも使用しています）&#x20;

* `mimalloc.lib`

Dash依存関係（内部）

* `IndexMeshSymbols.lib`&#x20;
* `_math.lib`&#x20;
* `_array.lib`&#x20;
* `meshoptimizer.lib`&#x20;
* `_gnmesh.lib`

</details>

<details>

<summary>Dash Pythonプラグインの依存関係は何ですか？</summary>

Dashは一連の内部およびサードパーティライブラリに依存しています。\
以下のリストは変わる可能性がありますが、執筆時点で使用されているサードパーティライブラリは次の通りです：

* `abseil`
* `eigen`
* `embree`
* `OpenSubdiv`
* `Physix`
* `tbb`
* `robin-hood-hasing`
* `tinyspline`
* `FastNoise2`
* fast\_obj
* `unordered_dense`
* `blinker`&#x20;
* `boto3`&#x20;
* `botocore`&#x20;
* `certifi`&#x20;
* `dateutil`&#x20;
* `jmespath`&#x20;
* `orjson`&#x20;
* `pytz`&#x20;
* `semver`&#x20;
* `s3transfer`&#x20;
* `sentry_sdk`&#x20;
* `urllib3`&#x20;
* `numpy`&#x20;
* `PIL`&#x20;
* `PySide6`&#x20;
* `scipy`&#x20;
* `sklearn`&#x20;
* `shiboken6`&#x20;
* `torch_redstone`

一部は純粋なPythonモジュールであり、一部はPythonモジュール内で使用するC++ライブラリです。

</details>

<details>

<summary>新しいリリースごとにプラグインを再コンパイルする必要がありますか？</summary>

はい。カスタムUnrealバージョンを使用している場合、C++プラグインを再コンパイルし、それに合わせたDashのPythonプラグインを再配布する責任はユーザー側にあります。\
\
一度構造が整っていれば、プロジェクトを再生成してビルドするだけで簡単に済むはずです。\
\
リリース間でinit\_unreal.pyが変更される可能性があるため、これも更新することを忘れないでください。

新しいバージョンのDashが利用可能になると、Dash内で直接通知を受け取り、その通知を受け取ったら常にここで最新のZIPをダウンロードできます： <https://www.polygonflow.io/download-latest-source-build>

</details>

<details>

<summary>C++プラグインをコンパイルするといくつかの警告が出ますが、どう対処すればよいですか？</summary>

Dashは常に進化しており、私たちの最優先事項はアーティストやスタジオに継続的なアップデートとワークフロー改善のための新しいツールを提供することです。\
この急速な開発のペースにより、時折コンパイル時の警告が残ることがあり、私たちはそれを認識していますが致命的ではありません。\
進行中に修正されることもありますが、警告を一切許容しないポリシーを採用している場合は、発生する警告に対処する必要があるかもしれません。

</details>

<details>

<summary>Enterpriseシートは何席必要ですか？</summary>

ツールにアクセスしてパラメータを調整したいアーティストの分だけシートが必要です。ビルドマシンに対するライセンスは必要ありません。&#x20;

</details>

<details>

<summary>リソースエラー - プロジェクトにファイルをコピーできません</summary>

Perforceなどのバージョン管理ソフトを使用していて、Dashを開いた際にリソース更新のポップアップが表示され、リソースエラーで失敗する場合、次の手順を実行してください：

1. Dashが1.9.2以降の場合は、手順5に進んでください
2. UEを閉じます、
3. PCのフォルダエクスプローラーで次のパスを開きます：DASH\_INSTALL\_ROOT\Plugins\UnrealEngineContext\Imports\GN、
4. そして、このContentUtils.pyファイルを次で入手できるものと置き換えます： <https://drive.google.com/drive/folders/129GZoD6borfOGJ4-sGD_VTAdVMtMgbKr?usp=sharing>
5. その後UEを開き、更新ポップアップは無視してください。つまり、更新をクリックするのではなく閉じます。
6. 次に、メインのDashメニューからDashの設定を開き、Content Settingsセクションにある新しい「Skip Resource Acquisition」設定にチェックを入れてください。
7. これにより、次回Dashを開いたときに更新ポップアップが表示されなくなるはずです。
8. 後でDashの更新がある際には、一人（プロジェクトとプラグインを設定した人など）が新しいリソースデータを取得してPerforceを通じて全員と共有するために次の手順を行う必要があります：
   1. 新しいバージョンのDashをインストールします
   2. プロジェクト内のContentフォルダ下のPolygonflowフォルダをPerforceで書き込み可能になるようロック解除します。
   3. Dashの設定でリソース取得を再度オンにします
   4. プロジェクトとDashを開き、ポップアップを通じて更新を実行します
   5. これで新しい更新ファイルがPerforceに追加され、チーム内の全員が使用できるようになります。&#x20;

</details>
