Um canal UV é um conjunto de dados dentro de uma malha estática que mapeia cada um dos vértices da malha para coordenadas no espaço 2D. Esses mapeamentos definem como os mapas de textura 2D são envolvidos pela geometria 3D quando a malha é renderizada.
Você costuma criar e gerenciar seus mapeamentos UV em uma ferramenta de modelagem dedicada, a mesma ferramenta que você usa para criar a geometria da sua malha estática. No entanto, o editor oferece algumas possibilidades para trabalhar com os canais UV dos modelos, descritas a seguir nesta página.
Os canais UV têm dois propósitos principais na Engine:
-
Coordenadas de textura em materiais: quando você cria um material que amostra um mapa de textura e o aplica à superfície de uma malha estática, você pode usar um nó de coordenada de textura (ou Texcoord) para especificar um canal UV. O material usa o mapeamento entre coordenadas 2D e posições de vértice 3D contidas no canal de UV selecionado para determinar quais áreas da textura devem ser usadas para sombrear quais triângulos no modelo 3D.
Por exemplo, o canal UV 0 nesta malha estática de plano simples (exibida no canto superior direito da imagem a seguir) mostra a maneira mais simples de mapear os dois triângulos da malha (A e B) no espaço de textura. Quando você usa esse canal UV (definido pela propriedade Coordinate Index do nó TexCoord), o material aplica a largura e a altura totais de uma textura ao plano.
Clique na imagem para ampliá-la.
Por outro lado, a imagem abaixo mostra o canal UV 1, que gira e distorce o mapeamento entre os triângulos e o espaço de textura UV. Quando a mesma textura de imagem é aplicada à malha estática, ela altera quais partes da textura são aplicadas a quais partes da malha estática.
Clique na imagem para ampliá-la.
Os triângulos no mapeamento UV podem se sobrepor. Uma sobreposição significa que a mesma parte da textura é aplicada a várias partes da geometria da malha estática 3D.
No canal UV, o U se refere ao eixo horizontal da textura. o V se refere ao eixo vertical. As coordenadas de textura costumam ser mantidas entre 0 e 1, em que (0,0) representa o canto inferior esquerdo da textura e (1,1) representa o canto superior direito. No entanto, isso nem sempre é verdadeiro. Por padrão, quando um valor U ou V excede 1 ou está abaixo de 0, o material "se dobra" para o outro lado da textura. Por exemplo, um valor de V de 1,25 costuma ser tratado como 0,25. No entanto, você pode fixar esses valores no material, limitando-os a um valor mínimo de 0 e um valor máximo de 1.
-
Lightmaps: canais UV também são usados para armazenar e aplicar mapas de iluminação. Um mapa de iluminação é um tipo especial de textura que armazena informações de iluminação pré-computadas para malhas estáticas. Quando você tem luzes no nível com a configuração Mobility definida como Stationary ou Static e compila a iluminação para seu nível, a ferramenta Lightmass salva a iluminação indireta (e a iluminação direta para luzes estáticas) nas texturas do mapa de iluminação usando um canal UV para determinar o mapeamento entre a geometria 3D da malha estática e o espaço de textura 2D.
Os canais UV usados para mapas de iluminação precisam seguir algumas regras especiais. Como cada parte de um objeto geralmente recebe quantidades diferentes de iluminação, dois triângulos na malha não podem se sobrepor no espaço de textura 2D. Cada triângulo deve cobrir uma área na textura. Além disso, todos os valores de coordenadas UV devem estar entre 0 e 1. Texturas de mapa de iluminação não podem "se dobrar" da mesma forma que mapeamentos de textura regulares. Por esses motivos, os UV do mapa de iluminação são normalmente gerados — ou empacotados — a partir de mapeamentos UV mais simples.
Por exemplo, o canal UV de mapeamento de texturas desse pilar mapeia a geometria de cada um dos quatro lados para as mesmas áreas sobrepostas da textura. Quando você usa esse canal de UV para aplicar uma textura à geometria, cada um dos lados usa as mesmas partes da textura.
Clique na imagem para ampliá-la.
No entanto, no mapa de iluminação UV do objeto, cada lado precisa cobrir uma área exclusiva de espaço 2D:
Clique na imagem para ampliá-la.
Para obter mais informações sobre UV de mapas de iluminação e como gerá-los, consulte Entendendo mapas de iluminação na Unreal Engine e Como gerar mapas de iluminação UV.
Cada malha estática na Engine pode ter até sete canais UV diferentes. Dessa forma, você pode configurar várias formas diferentes de dobrar texturas para diferentes materiais (ou para diferentes nós de amostragem de textura em um único material).
Canais UV no editor de malha estática
Na IU do editor de malha estática, você pode listar, visualizar e remover canais UV.
Como listar canais UV
Quando tiver um ativo de malha estática aberto no editor de malha estática, você poderá usar o botão UV na barra de ferramentas para listar todos os canais UV em uso pela malha estática atual.
Clique na imagem para ampliá-la.
Como visualizar um canal UV
Selecione qualquer canal UV na lista para visualizar o mapeamento dos triângulos da malha no espaço de textura 2D como uma sobreposição na janela de visualização:
Clique na imagem para ampliá-la.
Selecione None no topo da lista para ocultar a sobreposição de UV.
Como remover um canal UV
Quando tiver um canal selecionado na lista, você poderá removê-lo. Cada canal UV armazena coordenadas de textura para cada vértice como parte da malha estática, então você pode economizar alguma memória de tempo de execução removendo quaisquer mapeamentos que não usa.
Clique na imagem para ampliá-la.
Clique na imagem para ampliá-la.
Todos os outros canais UV que estavam presentes na lista após a exclusão do canal são movidos uma posição para cima para preencher o espaço vazio deixado pelo canal removido.
Clique na imagem para ampliá-la.
Não será possível excluir um canal UV se o ativo de malha estática estiver configurado para gerar UV de mapa de iluminação e o canal UV selecionado já estiver em uso como o canal de origem ou destino para UV de mapa de iluminação. Desative a opção Build Settings > Generate Lightmap UVs ou altere as configurações Build Settings > Source Lightmap Index e Build Settings > Destination Lightmap Index para apontar para diferentes canais de UV.
Como criar mapeamentos UV
Quando um material usa texturas como dado de origem para os canais (como cor-base, mapa de normais, rugosidade e assim por diante), ele normalmente usa o mapeamento UV do modelo para determinar quais partes dessas texturas serão dobradas em torno de quais partes da geometria. Portanto, quando um modelo não tem mapeamentos UV ou tem mapeamentos UV mal definidos, é comum encontrar problemas visíveis ao tentar usar um material texturizado. Por exemplo, se o mapeamento UV tiver muitas interrupções (lugares onde os triângulos adjacentes na geometria da malha não são adjacentes no mapeamento UV), a textura mostrará uma articulação visível nessas interrupções. Ou então, se o mapeamento UV atribuir áreas de espaço UV de forma desigual aos triângulos da malha (de modo que os triângulos grandes na malha sejam mapeados a pequenas áreas da textura ou vice-versa), a textura parecerá esticada ou distorcida em diferentes partes da malha.
Para obter os melhores resultados artísticos, tente sempre criar os mapeamentos UV para os objetos 3D em uma ferramenta de modelagem dedicada. No entanto, isso nem sempre é possível. Por exemplo, quando você importa dados de alguns tipos de aplicativos de modelagem CAD para a Unreal Engine, pode não haver uma maneira de criar um mapeamento UV de alta qualidade no aplicativo de origem. Para esses casos, você pode criar mapeamentos UV no Unreal Editor.
O Unreal Editor oferece duas maneiras de criar mapeamentos UV para uma malha estática:
Configuração do projeto: Para usar um dos métodos de geração de canais UV descritos a seguir, você deve instalar o plugin UV Editor para seu projeto da Unreal Engine.
Clique na imagem para ampliá-la.
Opção 1: desdobramento da geometria da malha
Nessa abordagem, os triângulos que compõem a geometria da malha estática são desdobrados e achatados automaticamente. A área da superfície dos triângulos é ajustada automaticamente para preservar a adjacência dos triângulos vizinhos e são introduzidas falhas em qualquer lugar em que o ângulo entre superfícies adjacentes ultrapasse um limite definido por você.
Para desdobrar uma malha estática em um novo mapeamento UV:
-
Escolha a malha estática que deseja desdobrar e siga um destes procedimentos:
-
Clique com o botão direito na malha estática do Navegador de Conteúdo e selecione Unwrap UV no menu de contexto.
Clique na imagem para ampliá-la.
-
Abra a malha estática que você deseja gerar no editor de malha estática. Em seguida, na barra de ferramentas do editor de malha estática, selecione UV > Unwrap UVs.
Clique na imagem para ampliá-la.
Se nenhuma das opções do menu aparecer, confirme se você habilitou o plugin Polygon Editing para o projeto.
-
-
Configure os parâmetros para controlar os resultados do desdobramento:
Clique na imagem para ampliá-la.
Configuração Descrição Seleção de canal Determina como o processo de desdobramento escolhe em qual canal salvar o novo mapeamento UV.
- Automatic Lightmap Setup: salva o mapeamento UV desdobrado no canal definido para essa malha estática como a origem de UV de mapa de iluminação e, em seguida, gera novos UV de mapa de iluminação a partir do novo mapeamento UV.
- First Empty Channel: salva o mapeamento UV desdobrado no primeiro canal UV vazio na malha estática.
- Specify Channel: escolha esta opção para especificar um índice de canal na configuração UVChannel.
UVChannel Quando Channel Selection estiver definido para Specify Channel, use esta configuração para determinar o índice do canal UV em que o UV desdobrado será salvo. Angle Threshold Determina o ângulo máximo entre duas faces adjacentes que permanecem conectadas após o desdobramento. Aumentar esse valor minimiza o número de "ilhas" UV separadas, mantendo mais triângulos conectados aos vizinhos e reduzindo o número de interrupções que podem causar quebras no mapeamento de texturas. No entanto, isso também pode introduzir mais distorção nas texturas agrupadas, pois os triângulos podem precisar ser redimensionados de forma mais agressiva no espaço 2D para permanecerem conectados aos seus vizinhos. -
Clique em Proceed.
Opção 2: como projetar a geometria da malha em um canal UV
Você pode projetar a geometria 3D da malha estática em um espaço de textura 2D usando um volume de projeção: um plano, uma caixa ou uma esfera. Nessa abordagem, cada face da malha estática é projetada para fora nas faces do volume de projeção. Em seguida, o volume de projeção é desdobrado em um espaço de textura 2D.
-
Abra a malha estática que deseja gerar no editor de malha estática.
Por exemplo, clique duas vezes no ativo de malha estática no Navegador de Conteúdo.
-
Na barra de ferramentas do editor de malha estática, selecione UV > Generate UVs.
Se essa opção de menu não aparecer, certifique-se de habilitar o plugin Polygon Editing para o projeto.
-
Você verá o painel Generate UV, com um conjunto de controles que ajudam a controlar os resultados da projeção UV.
Clique na imagem para ampliá-la.
Você também verá um volume verde aparecer ao redor da malha estática, na janela de visualização, com um dispositivo de manipulação padrão do Unreal Editor.
Se o volume e o manipulador não aparecerem primeiro, ative o botão Show Gizmo na parte inferior do painel Generate UV.
-
Na configuração Projection Type, escolha o volume que melhor se adapta às dimensões da malha estática.
-
Ajuste o tamanho, a posição e a rotação do volume para corresponder às extensões da malha estática.
Para isso, use o manipulador na janela de visualização ou os campos de texto no painel Generate UV. Você também pode usar o botão Fit para ajustar o volume às extensões da geometria da malha estática de forma automática como um bom ponto de partida.
-
Em Target Channel, defina o índice do canal onde deseja salvar o mapeamento UV projetado.
A maioria dos materiais obtém coordenadas de textura no canal 0. Se você estiver gerando um mapeamento UV para melhorar o mapa das texturas ao redor da geometria da malha estática, normalmente desejará definir "0" neste campo.
-
Clique em "Apply" para gerar o mapeamento UV e salve-o no canal de destino da malha estática.
A tabela a seguir descreve todas as configurações no painel Generate UV:
| Configuração | Descrição |
|---|---|
| Projection Type | O volume em que a geometria da malha estática é projetada. |
| Size | As dimensões do volume de projeção. |
| Position | A posição do volume de projeção em relação ao ponto de pivô da malha estática. |
| Rotation | A rotação do volume de projeção em relação ao ponto de pivô da malha estática. |
| UV Tiling Scale | A escala da projeção no espaço UV. Quanto maior o valor, maior a projeção no espaço de textura. Isso faz com que os detalhes da textura pareçam menores ao envolver a superfície da malha. |
| UV Offset | Controla o deslocamento da projeção no espaço de textura 2D. Valores menores no eixo X movem a projeção para a esquerda no mapeamento UV; valores maiores movem a projeção para a direita. Valores menores no eixo Y movem a projeção para cima no mapeamento UV; valores maiores movem a projeção para baixo. |
| Target Channel | O índice do canal UV onde a projeção será salva. Não pode ser o mesmo canal usado pelo editor de malha estática para armazenar UV de mapas de iluminação gerados. Se o canal de destino já tiver dados, o editor solicitará uma confirmação antes de continuar. |
| Show Gizmo | Alterna a renderização do volume de projeção e do dispositivo de manipulação na janela de visualização. |
| Apply | Gera a projeção UV de acordo com as configurações acima e salva o resultado no Target Channel. |
| Fit | Faz com que o tamanho do volume de projeção inclua toda a geometria da malha estática. |
Canais UV no script do editor
Você também pode trabalhar com canais UV em scripts de Blueprint e Python que você executa no Unreal Editor. Você pode fazer tudo o que faz no editor de malha estática, além de adicionar canais e gerar mapeamentos UV.
Pré-requisito: caso ainda não tenha instalado, você precisará instalar o plugin Editor Scripting Utilities. Para obter detalhes, consulte Como criar scripts e automatizar o editor.
Você encontrará os nós necessários para gerenciar os canais UV na categoria Editor Scripting > Static Mesh.
Para usar esses nós, sua classe de Blueprint deve ser derivada de uma classe exclusiva do editor, como a classe "PlacedEditorUtilityBase". Para obter detalhes, consulte Como criar códigos para o editor usando Blueprints.
Todas essas funções funcionam com um ativo de malha estática, que normalmente precisa ser carregado chamando o nó Editor Scripting > Asset Library > Load Asset.
A modificação de canais UV também modifica o ativo. Se quiser manter as alterações feitas, você também precisará usar um nó como Editor Scripting > Asset Library > Save Asset ou Save Loaded Asset depois. Veja os exemplos a seguir.
Como listar canais UV
Você pode usar o nó Get Num UV Channels para descobrir quantos canais UV existem em um ativo de malha estática específico.
Por exemplo:
Clique na imagem para ampliá-la.
Como remover um canal UV
Cada canal UV armazena coordenadas de textura para cada vértice como parte da malha estática, então você pode economizar alguma memória de tempo de execução removendo quaisquer mapeamentos que não usa.
Para remover um canal UV, chame o nó Remove UV Channel. Passe o ativo de malha estática e o índice do canal UV que você deseja remover.
Por exemplo:
Clique na imagem para ampliá-la.
Todos os outros canais UV que já estavam presentes na lista após o índice especificado são movidos uma posição para cima, para preencher o espaço vazio deixado pela entrada removida.
Não será possível excluir um canal UV se o ativo de malha estática estiver configurado para gerar UV de mapa de iluminação e o canal UV selecionado já estiver em uso como o canal de origem ou destino para UV de mapa de iluminação. Desative a opção Build Settings > Generate Lightmap UVs ou altere as configurações Build Settings > Source Lightmap Index e Build Settings > Destination Lightmap Index para apontar para diferentes canais UV.
Como adicionar um canal UV
Para adicionar um canal UV ao ativo de malha estática, chame um dos seguintes nós:
- Add UV Channel - Adiciona o novo canal ao final da lista de canais existentes.
- Insert UV Channel - Adiciona o novo canal no índice que você especificar, reduzindo cada canal UV um número na lista. Observe que a matriz de canais UV não pode ser esparsa. Você só pode inserir um novo canal em uma posição na lista próxima a outro canal existente. Por exemplo, se houver três canais UV na lista (índices 0, 1 e 2), você poderá adicionar um com índice 3, mas não com índice 4.
Clique na imagem para ampliá-la.
O novo mapeamento está vazio. Você deve preenchê-lo de alguma forma antes de usá-lo, seja projetando a geometria da malha (veja a seguir) ou usando-o como destino para a geração do mapa de iluminação.
Como desdobrar a geometria da malha em um canal UV
Você pode criar mapeamentos UV ao fazer com que o editor de malha estática abra e achate os triângulos que compõem a geometria da malha estática. A área da superfície dos triângulos é ajustada automaticamente para preservar a adjacência dos triângulos vizinhos e são introduzidas falhas em qualquer lugar em que o ângulo entre superfícies adjacentes ultrapasse um limite definido por você.
Configuração do projeto: Para usar o método de geração de canais UV descrito a seguir, você deve instalar o plugin Polygon Editing para seu projeto da Unreal Engine.
Use o nó Generate Unwrapped UV. Você precisará dar a este nó:
- Uma referência ao recurso de malha estática que deseja modificar,
- O índice do canal de UV onde você deseja salvar o UV desdobrado. Se o canal ainda não existir, o processo de desdobramento criará um.
- O ângulo máximo entre duas faces adjacentes que permanecem conectadas após o desdobramento. Aumentar esse valor minimiza o número de "ilhas" UV separadas, mantendo mais triângulos conectados aos vizinhos e reduzindo o número de interrupções que podem causar quebras no mapeamento de texturas. No entanto, isso também pode introduzir mais distorção nas texturas agrupadas, pois os triângulos podem precisar ser redimensionados de forma mais agressiva no espaço 2D para permanecerem conectados aos seus vizinhos.
Por exemplo:
Clique na imagem para ampliá-la.
Como projetar geometria de malha em um canal de UV
Você pode criar mapeamentos UV projetando os triângulos na malha estática em um plano 2D ou um volume 3D simples.
Cada nó descrito a seguir salva o mapeamento UV em um canal UV que você especifica. Este canal UV já deve existir. Se ele não existir, a função não o criará.
Projeção planar
Use o nó Generate Planar UV Channel para projetar a geometria da malha estática em um plano. Use esse tipo de projeção se apenas um lado da malha estática precisar de texturas ao redor dele.
Por exemplo:
Clique na imagem para ampliá-la.
Projeção cilíndrica
Use o nó Generate Cylindrical UV Channel para projetar a geometria da malha estática nas laterais, parte superior e inferior de um cilindro.
Por exemplo:
Clique na imagem para ampliá-la.
Projeção de caixa
Use o nó Generate Box UV Channel para projetar a geometria da malha estática nas faces de um cubo.
Por exemplo, o código a seguir cria uma caixa com o mesmo tamanho aproximado da malha estática e um mapeamento UV projetando a geometria da malha estática nas laterais da caixa:
Clique na imagem para ampliá-la.
Você encontrará as funções de gerenciamento de LOD na classe unreal.EditorStaticMeshLibrary.
Todas essas funções funcionam com um ativo de malha estática, que você normalmente precisará carregar chamando uma função como "Unreal.EditorAssetLibrary.load_asset".
A modificação de canais UV também modifica o ativo. Se você quiser manter as alterações feitas, também precisará usar uma função como "Unreal.EditorAssetLibrary.save_asset" ou "Unreal.EditorAssetLibrary.save_loaded_asset" posteriormente.
Como listar canais UV
Você pode usar a função "unreal.EditorStaticMeshLibrary.get_num_uv_channels" para descobrir quantos canais UV existem em um determinado ativo de malha estática.
Por exemplo:
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# Carregue o recurso de malha estática.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# Obtenha o número de canais UV salvos no ativo.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
print("Número de canais UV: " + str(num_uv_channels))
Como remover um canal UV
Cada canal UV armazena coordenadas de textura para cada vértice como parte da malha estática, então você pode economizar alguma memória de tempo de execução removendo quaisquer mapeamentos que não usa.
Para remover um canal de UV, chame a função "unreal.EditorStaticMeshLibrary.remove_uv_channel". Passe o ativo de malha estática e o índice do canal UV que você deseja remover.
Por exemplo:
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# Carregue o recurso de malha estática.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# Obtenha o número de canais UV salvos no ativo.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
# Remova o último da lista.
channel_to_remove = num_uv_channels - 1
unreal.EditorStaticMeshLibrary.remove_uv_channel(asset_name, channel_to_remove)
Salve o ativo modificado.
unreal.EditorAssetLibrary.save_asset(asset_name)
Todos os outros canais UV que já estavam presentes na lista após o índice especificado são movidos uma posição para cima, para preencher o espaço vazio deixado pela entrada removida.
Não será possível excluir um canal UV se o ativo de malha estática estiver configurado para gerar UV de mapa de iluminação e o canal UV selecionado já estiver em uso como o canal de origem ou destino para UV de mapa de iluminação. Desative a opção Build Settings > Generate Lightmap UVs ou altere as configurações Build Settings > Source Lightmap Index e Build Settings > Destination Lightmap Index para apontar para diferentes canais UV.
Como adicionar um canal UV
Para adicionar um canal de UV ao ativo de malha estática, chame uma das seguintes funções:
- "Unreal.EditorStaticMeshLibrary.add_uv_channel" - Adiciona o novo canal ao final da lista de canais existentes.
- "Unreal.EditorStaticMeshLibrary.insert_uv_channel" - Adiciona o novo canal no índice especificado, movendo os outros canais UV um número para baixo na lista. Observe que a matriz de canais UV não pode ser esparsa. Você só pode inserir um novo canal em uma posição na lista próxima a outro canal existente. Por exemplo, se houver três canais UV na lista (índices 0, 1 e 2), você poderá adicionar um com índice 3, mas não com índice 4.
Por exemplo:
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# Carregue o recurso de malha estática.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# Obtenha o número de canais UV salvos no ativo.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
print("Número de canais UV antes: " + str(num_uv_channels))
# Adicione um ao fim da lista.
unreal.EditorStaticMeshLibrary.add_uv_channel(asset_name)
# Adicione um no início da lista.
unreal.EditorStaticMeshLibrary.insert_uv_channel(asset_name, 0)
# Obtenha o novo número de canais UV salvos no ativo.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
print("Número de canais UV após: " + str(num_uv_channels))
Salve o ativo modificado.
unreal.EditorAssetLibrary.save_asset(asset_name)
O novo mapeamento está vazio. Você deve preenchê-lo de alguma forma antes de usá-lo, seja projetando a geometria da malha (veja a seguir) ou usando-o como destino para a geração do mapa de iluminação.
Como desdobrar a geometria da malha em um canal UV
Você pode criar mapeamentos UV ao fazer com que o editor de malha estática abra e achate os triângulos que compõem a geometria da malha estática. A área da superfície dos triângulos é ajustada automaticamente para preservar a adjacência dos triângulos vizinhos e são introduzidas falhas em qualquer lugar em que o ângulo entre superfícies adjacentes ultrapasse um limite definido por você.
Configuração do projeto: Para usar o método de geração de canais UV descrito a seguir, você deve instalar o plugin Polygon Editing para seu projeto da Unreal Engine.
Use a função unreal.UVGenerationFlattenMapping.generate_flatten_mapping_u_vs() . Passe:
- Uma referência ao recurso de malha estática que deseja modificar,
- O índice do canal de UV onde você deseja salvar o UV desdobrado. Se o canal ainda não existir, o processo de desdobramento criará um.
- O ângulo máximo, em graus, entre duas faces adjacentes que permanecem conectadas após o desdobramento. Aumentar esse valor minimiza o número de "ilhas" UV separadas, mantendo mais triângulos conectados aos vizinhos e reduzindo o número de interrupções que podem causar quebras no mapeamento de texturas. No entanto, isso também pode introduzir mais distorção nas texturas agrupadas, pois os triângulos podem precisar ser redimensionados de forma mais agressiva no espaço 2D para permanecerem conectados aos seus vizinhos.
Por exemplo:
import unreal
asset_name = '/Game/Meshes/StaticMesh'
# Carregue o recurso de malha estática.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# Especifique o canal de UV onde será salvo.
channel_index = 2
# Defina o limiar do ângulo
angle_threshold = 55
# Desdobre a malha no canal UV
unreal.UVGenerationFlattenMapping.generate_flatten_mapping_u_vs(loaded_asset, channel_index, angle_threshold)
Salve o ativo modificado.
unreal.EditorAssetLibrary.save_asset(asset_name)
Como projetar geometria de malha em um canal de UV
Você pode criar mapeamentos UV projetando os triângulos na malha estática em um plano 2D ou um volume 3D simples.
No momento, isso só está exposto nas APIs de script do Unreal Editor, não na IU do editor de malha estática. No entanto, o processo e as configurações exigidas pela API são mais fáceis de entender se você já estiver familiarizado com as ferramentas visuais para projeção de malha, como as do 3ds Max. Confira o Modificador de mapa UVW na Ajuda do 3ds Max para saber mais.
Cada uma das funções descritas a seguir salva o mapeamento UV que ela cria em um canal UV que você especifica. Este canal UV já deve existir. Se ele não existir, a função não o criará.
Projeção planar
Use a função "Unreal.EditorStaticMeshLibrary.generate_planar_uv_channel" para projetar a geometria da malha estática em um plano. Use esse tipo de projeção se apenas um lado da malha estática precisar de texturas ao redor dele.
Por exemplo:
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# Carregue o recurso de malha estática.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# Especifique o LOD a ser projetado.
lod_index = 0
# Adicione um canal UV à projeção.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
unreal.EditorStaticMeshLibrary.add_uv_channel(asset_name)
channel_index = num_uv_channels
# Configure o plano de projeção, ou "dispositivo".
bbox = loaded_asset.get_bounding_box()
gizmo_pos = ((bbox.min + bbox.max) * 0.5) # Localize o centro da caixa delimitadora do objeto.
# Defina os ângulos de rotação em graus.
pitch = 0 # Ao redor do eixo X
yaw = 0 # Ao redor do eixo Y
roll = 0 # Ao redor do eixo Z
gizmo_orientation = unreal.Rotator(pitch, yaw, roll)
# Aumente ou diminua os valores para aumentar ou diminuir a projeção.
tiling = unreal.Vector2D(1, 1)
# Projete a geometria da malha estática no canal UV.
unreal.EditorStaticMeshLibrary.generate_planar_uv_channel(loaded_asset, lod_index, channel_index, gizmo_pos, gizmo_orientation, tiling)
Salve o ativo modificado.
unreal.EditorAssetLibrary.save_asset(asset_name)
Projeção cilíndrica
Use a função "unreal.EditorStaticMeshLibrary.generate_cylindrical_uv_channel" para projetar a geometria da malha estática nas laterais, na parte superior e na parte inferior de um cilindro.
Por exemplo:
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# Carregue o recurso de malha estática.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# Especifique o LOD a ser projetado.
lod_index = 0
# Adicione um canal UV à projeção.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
unreal.EditorStaticMeshLibrary.add_uv_channel(asset_name)
channel_index = num_uv_channels
# Configure o cilindro de projeção, ou "dispositivo".
bbox = loaded_asset.get_bounding_box()
gizmo_pos = ((bbox.min + bbox.max) * 0.5) # Localize o centro da caixa delimitadora do objeto.
# Defina os ângulos de rotação em graus.
pitch = 0 # Ao redor do eixo X
yaw = 0 # Ao redor do eixo Y
roll = 0 # Ao redor do eixo Z
gizmo_orientation = unreal.Rotator(pitch, yaw, roll)
# Aumente ou diminua os valores para aumentar ou diminuir a projeção.
tiling = unreal.Vector2D(1, 1)
# Projete a geometria da malha estática no canal UV.
unreal.EditorStaticMeshLibrary.generate_cylindrical_uv_channel(teapot, lod_index, channel_index, gizmo_pos, gizmo_orientation, tiling)
Salve o ativo modificado.
unreal.EditorAssetLibrary.save_asset(asset_name)
Projeção de caixa
Use a função "unreal.EditorStaticMeshLibrary.generate_box_uv_channel" para projetar a geometria da malha estática nas faces de um cubo.
Por exemplo, o código a seguir cria uma caixa com o mesmo tamanho aproximado da malha estática e um mapeamento UV projetando a geometria da malha estática nas laterais da caixa:
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# Carregue o recurso de malha estática.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# Especifique o LOD a ser projetado.
lod_index = 0
# Adicione um canal UV à projeção.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
unreal.EditorStaticMeshLibrary.add_uv_channel(asset_name)
channel_index = num_uv_channels
# Configure o volume de projeção, ou "dispositivo".
bbox = loaded_asset.get_bounding_box()
gizmo_pos = ((bbox.min + bbox.max) * 0.5) # Localize o centro da caixa delimitadora do objeto.
# Defina os ângulos de rotação em graus.
pitch = 0 # Ao redor do eixo X
yaw = 0 # Ao redor do eixo Y
roll = 0 # Ao redor do eixo Z
gizmo_orientation = unreal.Rotator(pitch, yaw, roll)
# Obtenha o tamanho da caixa.
gizmo_size = bbox.max - bbox.min
# Projete a geometria da malha estática no canal UV.
unreal.EditorStaticMeshLibrary.generate_box_uv_channel(box, channel_index, lod_index, gizmo_pos, gizmo_orientation, gizmo_size)
Salve o ativo modificado.
unreal.EditorAssetLibrary.save_asset(asset_name)