# Build Personalizado

Nesta página, vamos passar pelo processo de instalação do Dash em uma build personalizada do UE5. Algumas coisas a ter em mente:

* O Dash é compatível apenas com UE5.1 e superior.
* Na maioria dos casos, o processo deve ser bastante direto, mas se a sua build personalizada do UE5 tiver sido drasticamente alterada em relação ao código-fonte base do engine, pode haver alguns problemas, e recomendamos que entre em contato com <info@polygonflow.io>
* Normalmente convidamos empresas para um canal compartilhado no Slack no qual podemos fornecer orientação ao vivo e falar diretamente com seus artistas para solicitações de feedback. Por favor, entre em contato!
* Para desativar relatórios de falhas, analytics, recursos de IA, etc., você pode definir certas Variáveis de Ambiente. Mais informações sobre este tópico mais adiante. \ <br>

Com isso fora do caminho, vamos começar.

Existem dois métodos de build, o primeiro sendo Plugin Build e o outro sendo Source Build. Os arquivos para ambos estão localizados neste Google Drive: [polygonflow.io/latest-source-build](https://www.polygonflow.io/latest-source-build), e você pode escolher seu método de build preferido verificando as diferentes instruções abaixo.

## Métodos de Build:

<details>

<summary>Opção 1: Instruções de Plugin Build</summary>

Este é o modo de implantação mais direto, pois é uma estrutura normal de plugin do Unreal Engine. [guia de plugins da Epic Games](https://dev.epicgames.com/documentation/en-us/unreal-engine/plugins-in-unreal-engine) pode ser aplicado normalmente.

Comece abrindo a pasta Plugin Build no [Google Drive](https://www.polygonflow.io/latest-source-build) e então abrindo a pasta correspondente à versão do Dash que você deseja instalar. Aqui você encontrará um zip para cada versão do UE que suportamos, então você só precisa baixar o zip para sua versão específica do UE.

Depois que o zip for baixado e extraído, a pasta Dash pode ser colocada em `PROJECT_ROOT/Plugins` ou `ENGINE_ROOT/Engine/Plugins` conforme descrito no [guia de plugins](https://dev.epicgames.com/documentation/en-us/unreal-engine/plugins-in-unreal-engine#pluginfolders).

### Instalação de Dependências Python

O código Python do Dash reside em `PLUGIN_ROOT/Content/Python` Que está automaticamente disponível para o Python do Unreal. `init_unreal.py` não precisa de nenhuma modificação e é sempre válido para todos os usuários.

Quando o Unreal Engine for iniciado pela primeira vez após a instalação do plugin Dash, o Dash instalará dependências Python em `PLUGIN_ROOT/Content/Python/Plugins/UnrealEngineContext/Imports/311/` para Unreal Engine 5.4+, e em `PLUGIN_ROOT/Content/Python/Plugins/UnrealEngineContext/Imports/39/` para Unreal Engine 5.1-5.3

Isso acontece uma vez por projeto (caso o Dash esteja instalado por projeto). OU uma vez por versão do engine (caso o Dash esteja instalado no engine). Para economizar espaço em disco, é recomendado instalar o Dash em `Engine/Plugins`. Exemplos de caminhos do engine: `ENGINE_ROOT/Engine/Plugins/GraphNUnrealPlugin`, `ENGINE_ROOT/Engine/Plugins/Polygonflow/GraphNUnrealPlugin`, `ENGINE_ROOT/Engine/Plugins/Whatever/GraphNUnrealPlugin`.

### Consumo de espaço em disco

O tamanho do plugin Dash é `~1GB` logo após ser instalado. Uma vez que as dependências Python sejam instaladas, o tamanho total é `~3GB`. Além disso, o Dash faz download de metadados de ativos como imagens de miniatura para os ativos, o que pode aumentar um pouco mais.

### Compilação

O plugin Dash obedece à estrutura normal de plugin de código do Unreal Engine, e pode ser compilado dentro de um projeto C++, ou [usando scripts de automação do unreal](https://dev.epicgames.com/community/learning/tutorials/qz93/unreal-engine-building-plugins), ou usando o botão “Package” em `Tools→Plugins` menu. Isso permite que usuários construam o Dash para engines customizadas

### Desinstalação

Basta remover a pasta GraphNUnrealPlugin de `Engine/Plugins` ou `PROJECT_ROOT/Plugins`

Também remova `Documents/Polygonflow` pasta

</details>

<details>

<summary>Opção 2: Instruções de Source Build</summary>

Para esta opção de build, comece abrindo a pasta Source Build no [Google Drive](https://www.polygonflow.io/latest-source-build) e então baixando o zip da versão do Dash que você deseja instalar. <br>

Este arquivo ZIP, que contém:

* **Dash**: Esta pasta contém os arquivos copiados do instalador. Ela permite que você distribua o plugin sem instalação, através do controle de versão ou uma pasta compartilhada.
* **GraphNUnrealPlugin**: Este diretório contém o código C++ necessário para integrar o Dash na sua build personalizada do engine.
* **init\_unreal.py**: Caso você opte por não instalar o Dash em cada máquina de artista, este arquivo de desenvolvedor serve como ponto de entrada para iniciar a parte Python do plugin.<br>

Então é hora de compilar!

1. Crie um novo projeto Unreal C++
2. Coloque o plugin na pasta `Plugins` do projeto (crie a pasta Plugins se ainda não existir). O resultado deve ser `Plugins\\GraphNUnrealPlugin`
3. Copie o `init_unreal.py` enviado no ZIP dentro do seu projeto `Plugins/GraphNUnrealPlugin/Content/Python` para permitir que o plugin veja `Dash` e suas bibliotecas, ou você receberá erros como `ModuleNotFoundError: No module named 'GN'`
4. Edite o caminho no final do`init_unreal.py` arquivo, com a localização onde você colocou sua pasta Dash se quiser distribuir o plugin, ou com o diretório de instalação, se estiver usando o instalador.
5. Gere o projeto do Visual Studio clicando com o botão direito no explorer no arquivo .uproject e selecionando “Generate Visual Studio project files”

<figure><img src="https://654444654-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>Clique com o botão direito para gerar os arquivos do projeto</p></figcaption></figure>

6. Abra a solução no Visual Studio ou Rider e compile-a a partir daí. Encontre mais informações na [documentação oficial](https://docs.unrealengine.com/5.0/en-US/setting-up-visual-studio-development-environment-for-cplusplus-projects-in-unreal-engine/).

### Uso a partir do Python

O plugin expõe algumas funcionalidades para o interpretador Python, e você pode fazer o unreal gerar os stubs Python para você, para que possa carregá-los no nosso IDE.

1. Abra o Unreal Engine e ative o plugin. Isso ativará **Python Script Plugin** e **Editor scripting utilities** plugins
2. Vá para as configurações do projeto e habilite o modo desenvolvedor

<figure><img src="https://654444654-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>O modo desenvolvedor irá gerar stubs Python para autocompletar</p></figcaption></figure>

3. Reinicie o editor.
4. Verifique `PROJECT_ROOT/Intermediate/PythonStub/unreal.py`
5. Adicione este arquivo ao seu IDE para ter o autocompletar com as funções exportadas

</details>

## Exclusões do Controle de Versão

<details>

<summary>Possíveis arquivos a serem excluídos do controle de versão/fonte para ambos os tipos de build:</summary>

* `Plugins/UnrealEngineContext/Imports/thirdparty` (\~2 GB) - Esta pasta será criada e populada por máquina de usuário e conterá pacotes Python
* `Modules/GN/ContentLibrary/Backends/IESLibrary/IesLibraryContents` (\~28 MB) - Esta pasta será extraída de `IesLibraryContents.zip` localizado na mesma pasta
* `ThirdPartyLicenses` - Isso não afeta a funcionalidade, opcional
* `__pycache__` - Gerado pelo Python
* `*.pyc` - Gerado pelo Python
* `*.pdf` - Documentos legais como EULA, opcional
* `*.md` - Documentos legais e docs internos, opcional

</details>

## Variáveis de Ambiente do Dash

<details>

<summary>Instruções de Variáveis de Ambiente do Dash</summary>

Ao definir certas Variáveis de Ambiente, você pode controlar se certos recursos e opções estão disponíveis no Dash. O uso de "1", "yes" ou "true" todos respondem a `verdadeiro`.&#x20;

<figure><img src="https://654444654-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

Habilita ou desabilita o relatório de falhas que pode incluir caminhos de arquivos.  \
Valor padrão = `habilitado`.

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

Habilita ou desabilita verificações de atualização na inicialização. As verificações de atualização ocorrem uma vez por sessão do editor Unreal quando o Dash aparece pela primeira vez. O Dash faz uma requisição ao nosso servidor Cloudflare para buscar as informações da versão mais recente. \
Valor padrão - `habilitado`

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

Habilita ou desabilita a telemetria de uso do Dash. O Dash envia dados de uso periodicamente para nosso cluster MongoDB. Valor padrão - `habilitado`

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

Se habilitado, o interruptor para controlar a opção de analytics será adicionado à interface de preferências do Dash. \
Valor padrão - `habilitado`

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

Habilita ou desabilita o assistente de IA e a marcação de ativos por IA através da nossa conta OpenAI Enterprise API. Valor padrão - `habilitar`

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

Se habilitado, a opção de alternar para ativar recursos de IA usando a OpenAI Enterprise API será adicionada à interface de preferências do Dash.\
Valor padrão - `habilitado`

</details>

## Perguntas Frequentes

<details>

<summary>Permissão Negada / apenas leitura / arquivo protegido contra gravação - Problema de Controle de Versão</summary>

Se você vir um erro relacionado a permissão negada ou leitura/gravação, por exemplo, em relação ao arquivo metadata.json, você pode tentar duas coisas:<br>

1. Desative a proteção de gravação automática na pasta Documents que o Windows Defender adiciona no Windows 11. É uma "Pasta protegida"
2. Você pode marcar o metadata.json ou quaisquer outros arquivos do Dash sob controle de versão como sempre graváveis através do Perforce, etc., e então refazer o processo de instalação desde o início.&#x20;

</details>

<details>

<summary>Precisamos compilar o plugin em cada máquina?</summary>

Não. Você pode distribuir o plugin C++ pré-compilado em cada máquina que use a mesma versão do engine contra a qual você compilou.

</details>

<details>

<summary><strong>Precisamos instalar o plugin em cada máquina dos artistas?</strong></summary>

Para executar, o Dash precisará de 2 componentes:

* O plugin Unreal C++
* O plugin Python do Dash

Você pode instalar o plugin em cada máquina dos artistas, ou distribuí-lo diretamente com seu controle de versão, junto com o plugin C++ compilado customizado.

</details>

<details>

<summary>Quais são as dependências do plugin C++?</summary>

A seguir uma lista das dependências da camada C++:

Memory lib da Microsoft (o unreal também o utiliza)&#x20;

* `mimalloc.lib`

Dependências do Dash (Internas)

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

</details>

<details>

<summary>Quais são as dependências do plugin Python do Dash?</summary>

O Dash depende de uma série de bibliotecas internas e de terceiros.\
A lista a seguir pode mudar, mas no momento da redação estas são as bibliotecas de terceiros usadas:

* `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`

Algumas são módulos Python puros, outras são bibliotecas C++ que usamos dentro de nossos módulos Python.

</details>

<details>

<summary>Vou precisar recompilar o plugin em cada novo lançamento?</summary>

Sim. Se você estiver usando uma versão personalizada do Unreal, você ficará responsável por recompilar o plugin C++ e redistribuir o plugin Python do Dash correspondente junto com ele.\
\
Uma vez que você já tenha a estrutura em funcionamento, deve ser tão simples quanto regenerar o projeto e compilar.\
\
Certifique-se também de atualizar o init\_unreal.py, pois ele pode mudar entre releases.

Quando uma nova versão do Dash estiver disponível, você receberá uma notificação diretamente no Dash, e assim que a receber encontrará o ZIP mais recente para download aqui sempre: <https://www.polygonflow.io/download-latest-source-build>

</details>

<details>

<summary>Ao compilar o plugin C++ eu recebo alguns avisos, como posso resolvê-los?</summary>

O Dash está em constante evolução, e nossa prioridade é dar aos artistas e estúdios atualizações constantes e novas ferramentas para melhorar seu fluxo de trabalho.\
Esse ritmo rápido de desenvolvimento às vezes deixará alguns avisos de compilação pelos quais estamos cientes e que não são críticos. \
Eles podem ser corrigidos conforme avançamos, mas se você tiver uma política de zero avisos, infelizmente pode ter que resolver os que aparecerem.

</details>

<details>

<summary>Quantas Licenças Enterprise eu preciso?</summary>

Você só precisa de licenças para aqueles artistas que desejam acesso às ferramentas e a capacidade de ajustar parâmetros. Você também não precisa de licenças para Máquinas de Build.&#x20;

</details>

<details>

<summary>Erro de Recurso - Incapaz de copiar arquivos no seu projeto</summary>

Se você estiver usando Perforce ou outro software de Controle de Versão e, ao abrir o Dash, vir nossa janela de atualização de recursos e ela falhar mostrando um Erro de Recurso, aqui está o que você precisa fazer:

1. Se você estiver no Dash 1.9.2 ou superior, passe para o passo 5
2. Feche o UE,
3. Abra este caminho no explorador de pastas do seu PC: DASH\_INSTALL\_ROOT\Plugins\UnrealEngineContext\Imports\GN,
4. E então substitua este arquivo ContentUtils.py pelo disponível aqui: <https://drive.google.com/drive/folders/129GZoD6borfOGJ4-sGD_VTAdVMtMgbKr?usp=sharing>
5. Então abra o UE e ignore a janela de atualização, ou seja, feche-a em vez de clicar para atualizar
6. Então, abra as preferências do Dash através do menu principal do Dash e marque a nova configuração "Skip Resource Acquisition" que está disponível na seção Content Settings
7. Então você não deverá receber a janela de atualização na próxima vez que abrir o Dash
8. Mais tarde, quando houver uma atualização do Dash, uma pessoa (a pessoa que configurou o projeto e os plugins, talvez) precisará executar estes passos para obter os novos dados de recurso e compartilhá-los com todos através do Perforce:
   1. Instale a nova versão do Dash
   2. Desbloqueie a pasta Polygonflow dentro da pasta Content no projeto através do Perforce para que ela seja gravável.
   3. Ative a aquisição de recursos novamente nas preferências do Dash
   4. Abra o Projeto e o Dash, e execute a atualização através da janela pop-up
   5. Agora, os novos arquivos de atualização foram adicionados ao Perforce e estão prontos para serem usados por toda a equipe.&#x20;

</details>
