# 커스텀 빌드

이 페이지에서는 커스텀 UE5 빌드에 Dash를 설치하는 과정을 설명합니다. 몇 가지 유의사항:

* Dash는 UE5.1 이상에서만 호환됩니다.
* 대부분의 경우 과정은 비교적 간단하지만, 커스텀 UE5 빌드가 기본 엔진 소스에서 크게 변경된 경우 문제가 발생할 수 있으므로 <info@polygonflow.io>로 연락하는 것을 권장합니다.
* 우리는 보통 회사들을 실시간 가이던스를 제공하고 아티스트와 직접 피드백을 주고받을 수 있는 공유 Slack 채널로 초대합니다. 연락주세요!
* 충돌 보고, 분석, AI 기능 등을 끄려면 특정 환경 변수를 설정할 수 있습니다. 이 주제에 대한 자세한 정보는 아래에 나옵니다. \ <br>

그럼 시작해봅시다.

빌드 방법은 두 가지가 있으며, 첫 번째는 플러그인 빌드이고 다른 하나는 소스 빌드입니다. 두 파일은 다음 Google Drive에 있습니다: [polygonflow.io/latest-source-build](https://www.polygonflow.io/latest-source-build)이며, 아래의 다른 지침을 확인하여 선호하는 빌드 방법을 선택할 수 있습니다.

## 빌드 방법:

<details>

<summary>옵션 1: 플러그인 빌드 지침</summary>

이는 일반적인 언리얼 엔진 플러그인 구조이기 때문에 가장 간단한 배포 방식입니다. [Epic games 플러그인 가이드](https://dev.epicgames.com/documentation/en-us/unreal-engine/plugins-in-unreal-engine) 를 정상적으로 적용할 수 있습니다.

먼저 [Google Drive](https://www.polygonflow.io/latest-source-build) 에서 Plugin Build 폴더를 열고 설치하려는 Dash 버전에 해당하는 폴더를 엽니다. 여기에는 지원하는 각 UE 버전별로 하나의 zip이 있으므로 특정 UE 버전용 zip만 다운로드하면 됩니다.

zip을 다운로드하여 압축을 푼 후, Dash 폴더를 다음 위치 아래에 배치할 수 있습니다. `PROJECT_ROOT/Plugins` 또는 `ENGINE_ROOT/Engine/Plugins` 처럼 [플러그인 가이드](https://dev.epicgames.com/documentation/en-us/unreal-engine/plugins-in-unreal-engine#pluginfolders).

### Python 종속성 설치

Dash Python 코드는 다음에 위치합니다. `PLUGIN_ROOT/Content/Python` 이는 언리얼의 Python에서 자동으로 사용 가능합니다. `init_unreal.py` 는 수정이 필요 없으며 모든 사용자에게 항상 유효합니다.

Dash 플러그인 설치 후 언리얼 엔진을 처음 시작하면 Dash는 Python 종속성을 다음 경로에 설치합니다. `PLUGIN_ROOT/Content/Python/Plugins/UnrealEngineContext/Imports/311/` 언리얼 엔진 5.4+의 경우, 그리고 `PLUGIN_ROOT/Content/Python/Plugins/UnrealEngineContext/Imports/39/` 언리얼 엔진 5.1-5.3의 경우에 설치됩니다.

이 과정은 프로젝트당 한 번(프로젝트별로 Dash를 설치한 경우) 또는 엔진 버전당 한 번(엔진에 Dash를 설치한 경우) 발생합니다. 디스크 공간을 절약하려면 Dash를 `Engine/Plugins`아래에 설치하는 것이 권장됩니다. 예시 엔진 경로: `ENGINE_ROOT/Engine/Plugins/GraphNUnrealPlugin`, `ENGINE_ROOT/Engine/Plugins/Polygonflow/GraphNUnrealPlugin`, `ENGINE_ROOT/Engine/Plugins/Whatever/GraphNUnrealPlugin`.

### 디스크 공간 사용량

Dash 플러그인 크기는 `~1GB` 설치 직후에는 약 `~3GB`이고, 여기에 추가로 에셋의 썸네일 이미지 같은 에셋 메타데이터를 다운로드하면 더 늘어날 수 있습니다.

### 컴파일

Dash 플러그인은 일반적인 언리얼 엔진 코드 플러그인 구조를 따르며 C++ 프로젝트 내에서 컴파일할 수 있고, [unreal 자동화 스크립트를 사용하거나](https://dev.epicgames.com/community/learning/tutorials/qz93/unreal-engine-building-plugins)또는 `도구→플러그인` 메뉴의 “패키지” 버튼을 사용하여 컴파일할 수 있습니다. 이를 통해 사용자들은 커스텀 엔진용으로 Dash를 빌드할 수 있습니다.

### 제거(언인스톨)

GraphNUnrealPlugin 폴더를 다음에서 제거하면 됩니다. `Engine/Plugins` 또는 `PROJECT_ROOT/Plugins`

다음도 함께 제거하세요. `Documents/Polygonflow` 폴더

</details>

<details>

<summary>옵션 2: 소스 빌드 지침</summary>

이 빌드 옵션의 경우, 먼저 [Google Drive](https://www.polygonflow.io/latest-source-build) Source Build 폴더를 열고 설치하려는 Dash 버전의 zip을 다운로드하세요. <br>

이 ZIP 파일에는 다음이 포함되어 있습니다:

* **Dash**: 이 폴더는 설치 프로그램에서 복사된 파일을 포함합니다. 설치 없이 버전 관리나 공유 폴더를 통해 플러그인을 배포할 수 있게 해줍니다.
* **GraphNUnrealPlugin**: 이 디렉토리는 커스텀 엔진 빌드에 Dash를 통합하는 데 필요한 C++ 코드를 포함합니다.
* **init\_unreal.py**: 모든 아티스트의 머신에 Dash를 설치하지 않기로 선택한 경우, 이 개발자 파일은 플러그인의 Python 부분을 시작하는 진입점 역할을 합니다.<br>

그런 다음 빌드할 시간입니다!

1. 새로운 언리얼 C++ 프로젝트를 생성하세요
2. 플러그인을 프로젝트의 `Plugins` 폴더에 넣으세요(Plugin 폴더가 없으면 생성). 결과는 `Plugins\\GraphNUnrealPlugin`
3. ZIP에 포함된 `init_unreal.py` 파일을 프로젝트 안에 복사하세요 `Plugins/GraphNUnrealPlugin/Content/Python` 를 통해 플러그인이 `Dash` 및 그 라이브러리들을 인식할 수 있게 하거나 그렇지 않으면 `ModuleNotFoundError: No module named 'GN'`
4. 와 같은 오류가 발생할 수 있습니다.`init_unreal.py` 플러그인을 배포하려면 Dash 폴더를 배치한 위치로, 설치 프로그램을 사용하는 경우에는 설치 디렉토리로
5. 파일의 끝 부분에 있는 경로를 편집하세요.

<figure><img src="https://3738228828-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>.explorer에서 .uproject 파일을 우클릭하고 “Visual Studio 프로젝트 파일 생성(Generate Visual Studio project files)”을 선택하여 비주얼 스튜디오 프로젝트를 생성하세요.</p></figcaption></figure>

6. 우클릭하여 프로젝트 파일을 생성하세요 [비주얼 스튜디오나 Rider에서 솔루션을 열고 거기서 빌드하세요. 자세한 정보는](https://docs.unrealengine.com/5.0/en-US/setting-up-visual-studio-development-environment-for-cplusplus-projects-in-unreal-engine/).

### 공식 문서

에서 확인하세요.

1. Python에서 사용하기 **플러그인은 파이썬 인터프리터에 일부 기능을 노출하며, 언리얼이 파이썬 스텁을 생성하게 하여 IDE에서 로드할 수 있게 할 수 있습니다.** 언리얼 엔진을 열고 플러그인을 활성화하세요. 그러면 다음이 활성화됩니다. **Python Script Plugin** 및
2. Editor scripting utilities

<figure><img src="https://3738228828-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>플러그인들</p></figcaption></figure>

3. 프로젝트 설정으로 가서 개발자 모드를 활성화하세요
4. 개발자 모드는 자동 완성을 위한 파이썬 스텁을 생성합니다 `에디터를 재시작하세요.`
5. 다음을 확인하세요.

</details>

## PROJECT\_ROOT/Intermediate/PythonStub/unreal.py

<details>

<summary>이 파일을 IDE에 추가하면 내보낸 함수들에 대한 자동 완성을 사용할 수 있습니다.</summary>

* `버전 관리에서 제외할 항목` 두 빌드 유형 모두에서 버전/소스 관리에서 제외할 가능성이 있는 파일들:
* `Plugins/UnrealEngineContext/Imports/thirdparty` (\~2 GB) - 이 폴더는 사용자 머신별로 생성되고 채워지며 Python 패키지를 포함합니다 `Modules/GN/ContentLibrary/Backends/IESLibrary/IesLibraryContents` (\~28 MB) - 이 폴더는 동일한 폴더에 있는
* `IesLibraryContents.zip` 에서 추출됩니다.
* `ThirdPartyLicenses` - 기능에 영향이 없으며 선택 사항입니다
* `__pycache__` - 기능에 영향이 없으며 선택 사항입니다
* `- Python이 생성합니다` \*.pyc
* `*.pdf` - EULA 같은 법적 문서, 선택 사항

</details>

## \*.md

<details>

<summary>- 법적 문서 및 내부 문서, 선택 사항</summary>

Dash 환경 변수 `Dash 환경 변수 지침`.&#x20;

<figure><img src="https://3738228828-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에서 특정 기능과 옵션의 사용 가능 여부를 제어할 수 있습니다. "1", "yes", "true"의 사용은 모두

참(true) `로 인식됩니다.`.

### **DASH\_CRASH\_REPORT\_ENABLED**

파일 경로를 포함할 수 있는 충돌 보고를 활성화하거나 비활성화합니다.  \
기본값 = `로 인식됩니다.`

### **활성화됨**

DASH\_UPDATE\_CHECK\_ENABLED `로 인식됩니다.`

### **시작 시 업데이트 확인을 활성화하거나 비활성화합니다. 업데이트 확인은 Dash가 처음 나타나는 언리얼 에디터 세션에서 한 번 발생합니다. Dash는 최신 버전 정보를 가져오기 위해 당사의 Cloudflare 서버에 요청을 보냅니다.** **기본값 -**

DASH\_ANALYTICS\_ENABLED `로 인식됩니다.`

### **Dash 사용 텔레메트리(분석)를 활성화하거나 비활성화합니다. Dash는 주기적으로 사용 데이터를 당사의 MongoDB 클러스터로 전송합니다. 기본값 -**

DASH\_REGISTER\_PREFERENCES\_FOR\_ANALYTICS `이 옵션을 활성화하면 분석 옵션을 제어하는 토글이 Dash 환경설정 UI에 추가됩니다.` \
`기본값 -`

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

우리의 OpenAI Enterprise API 계정을 통해 AI 어시스턴트와 AI 에셋 태깅을 활성화하거나 비활성화합니다. 기본값 - `로 인식됩니다.`

</details>

## 활성화

<details>

<summary>DASH_REGISTER_PREFERENCES_FOR_OPEN_AI</summary>

이 옵션을 활성화하면 OpenAI Enterprise API를 사용한 AI 기능 활성화 토글 옵션이 Dash 환경설정 UI에 추가됩니다.\
기본값 -<br>

1. 자주 묻는 질문(FAQ)
2. 권한 거부 / 읽기 전용 / 쓰기 보호 파일 - 리비전(버전) 제어 문제&#x20;

</details>

<details>

<summary>metadata.json 파일과 관련된 권한 거부 또는 읽기/쓰기 오류가 표시되면 다음 두 가지를 시도해 볼 수 있습니다:</summary>

Windows Defender가 Windows 11에서 추가하는 문서 폴더의 자동 쓰기 보호를 끄세요. 이는 "보호된 폴더(Protected folder)"입니다.

</details>

<details>

<summary><strong>Perforce 등 버전 관리 시스템에서 metadata.json 또는 다른 Dash 파일들을 항상 쓰기 가능하도록 표시한 다음, 설치 과정을 처음부터 다시 수행하세요.</strong></summary>

플러그인을 모든 머신에서 컴파일해야 합니까?

* 아니요. 빌드에 사용한 것과 동일한 엔진 버전을 사용하는 모든 머신에 대해 사전 빌드된 C++ 플러그인을 배포할 수 있습니다.
* 플러그인을 모든 아티스트 머신에 설치해야 합니까?

Dash를 실행하려면 두 가지 구성 요소가 필요합니다:

</details>

<details>

<summary>언리얼 C++ 플러그인</summary>

Dash Python 플러그인

플러그인을 모든 아티스트 머신에 설치하거나, 버전 관리와 함께 C++ 커스텀 빌드 플러그인과 함께 직접 배포할 수 있습니다.&#x20;

* `C++ 플러그인의 종속성은 무엇인가요?`

C++ 레이어의 종속성 목록은 다음과 같습니다:

* `Microsoft의 메모리 라이브러리(언리얼도 사용함)`&#x20;
* `mimalloc.lib`&#x20;
* `Dash 내부 종속성`&#x20;
* `IndexMeshSymbols.lib`&#x20;
* `_math.lib`

</details>

<details>

<summary>_array.lib</summary>

meshoptimizer.lib

* `_gnmesh.lib`
* `Dash Python 플러그인의 종속성은 무엇인가요?`
* `Dash는 내부 및 서드파티 라이브러리들에 의존합니다.`\
  `다음 목록은 변경될 수 있지만, 작성 시점에 사용되는 서드파티 라이브러리는 다음과 같습니다:`
* `abseil`
* `eigen`
* `embree`
* `OpenSubdiv`
* `Physix`
* `tbb`
* robin-hood-hasing
* `tinyspline`
* `FastNoise2`&#x20;
* `fast_obj`&#x20;
* `unordered_dense`&#x20;
* `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`

sklearn

</details>

<details>

<summary>shiboken6</summary>

torch\_redstone

일부는 순수 파이썬 모듈이고 일부는 파이썬 모듈 내부에서 사용하는 C++ 라이브러리입니다. [새 릴리스마다 플러그인을 다시 컴파일해야 하나요?](https://www.polygonflow.io/download-latest-source-build)

</details>

<details>

<summary>예. 커스텀 언리얼 버전을 사용하는 경우, C++ 플러그인을 다시 컴파일하고 해당하는 Dash Python 플러그인을 함께 재배포하는 책임은 사용자에게 있습니다.<br><br>구조가 이미 마련되어 있다면 프로젝트를 다시 생성하고 빌드하는 것만큼 간단해야 합니다.<br><br>릴리스 간에 변경될 수 있으니 init_unreal.py도 업데이트해야 합니다.</summary>

새로운 Dash 버전이 나오면 Dash에서 직접 알림을 받게 되며, 알림을 받으면 항상 여기에서 최신 ZIP을 다운로드할 수 있습니다:

</details>

<details>

<summary>https://www.polygonflow.io/download-latest-source-build</summary>

C++ 플러그인을 컴파일할 때 몇몇 경고가 나오면 어떻게 해결하나요?&#x20;

</details>

<details>

<summary>Dash는 지속적으로 진화하고 있으며, 우리의 최우선 과제는 아티스트와 스튜디오에 지속적인 업데이트와 워크플로우 향상 도구를 제공하는 것입니다.<br>이러한 빠른 개발 속도는 때때로 우리가 인지하고 있으며 치명적이지 않은 컴파일 경고를 남길 수 있습니다. <br>진행 과정에서 수정될 수 있지만, 경고를 전혀 허용하지 않는 정책이 있다면 발생하는 경고들을 직접 해결해야 할 수도 있습니다.</summary>

엔터프라이즈 좌석(라이선스)은 몇 개가 필요합니까?

1. 도구에 접근하고 파라미터를 조정할 권한을 원하는 아티스트에게만 좌석이 필요합니다. 빌드 머신에는 라이선스가 필요하지 않습니다.
2. 리소스 오류 - 프로젝트에 파일을 복사할 수 없습니다
3. Perforce나 다른 버전 관리 소프트웨어를 사용 중이고 Dash를 열 때 리소스 업데이트 팝업이 나타나며 리소스 오류로 실패한다면 다음을 수행하세요:
4. Dash 1.9.2 이상을 사용 중이라면 5단계로 이동하세요 [언리얼을 종료하세요.](https://drive.google.com/drive/folders/129GZoD6borfOGJ4-sGD_VTAdVMtMgbKr?usp=sharing)
5. PC 폴더 탐색기에서 이 경로를 여세요: DASH\_INSTALL\_ROOT\Plugins\UnrealEngineContext\Imports\GN,
6. 그리고 여기 있는 ContentUtils.py 파일을 다음에서 제공되는 파일로 교체하세요:
7. <https://drive.google.com/drive/folders/129GZoD6borfOGJ4-sGD\\_VTAdVMtMgbKr?usp=sharing>
8. 그런 다음 언리얼을 열고 업데이트 팝업을 무시하세요. 즉, 업데이트를 클릭하지 말고 닫으세요.
   1. 그런 다음 메인 Dash 메뉴를 통해 Dash 환경설정을 열고 콘텐츠 설정 섹션에 있는 새 "리소스 획득 건너뛰기(Skip Resource Acquisition)" 설정을 확인하세요.
   2. 그렇게 하면 다음 번에 Dash를 열 때 업데이트 팝업이 나타나지 않을 것입니다.
   3. 나중에 Dash 업데이트가 있을 때, 한 사람이(프로젝트와 플러그인을 설정한 사람 등) 다음 단계들을 수행하여 새 리소스 데이터를 받아 Perforce를 통해 모두와 공유해야 합니다:
   4. 새 버전의 Dash를 설치하세요
   5. 프로젝트의 Content 폴더 아래에 있는 Polygonflow 폴더의 잠금을 Perforce에서 해제하여 쓰기가 가능하도록 만드세요.&#x20;

</details>
