O Framework de Geração Procedural de Conteúdo (PCG) é um conjunto de ferramentas para criar seu próprio conteúdo e ferramentas procedurais dentro da Unreal Engine. O PCG oferece aos artistas técnicos, designers e programadores a capacidade de criar ferramentas e conteúdos rápidos, iterativos e com qualquer complexidade, desde utilitários de ativos, como edifícios ou geração de biomas, até mundos inteiros.
Conceitos e termos importantes
Pontos: posições no espaço 3D que são geradas pelo grafo de PCG e geralmente usadas para surgir malhas. Os pontos contêm informações sobre as transformações, limites, cor, densidade, inclinação e valor inicial. Eles podem receber atributos definidos pelo usuário.
Densidade de pontos: valor usado por vários nós do grafo. Isso é representado na visualização de depuração como um gradiente em cada ponto e representa a probabilidade de o ponto existir nessa posição. Densidade 0 é preto e densidade 1 é branco.
Configuração necessária
O Framework de Geração Procedural de Conteúdo (PCG) exige que o plugin do Framework de Geração Procedural de Conteúdo (PCG) esteja habilitado no projeto. Para obter mais informações sobre como habilitar plugins, consulte Com trabalhar com plugins.
O plugin Geometry Script Interop do Framework de Geração Procedural de Conteúdo (PCG) é necessário para amostra de pontos em malhas estáticas.
O Grafo de Nós Procedurais
O Grafo de Nós Procedurais é a peça central do Framework de Geração Procedural de Conteúdo.
Usando um formato semelhante ao Editor de Material, os dados espaciais fluem de um Componente de PCG no nível para o grafo e são usados para gerar pontos. Os pontos são filtrados e modificados por uma série de nós, com a saída sendo atualizada em tempo real. Os pontos resultantes podem ser usados para gerar diversos ativos.
Como criar o ativo no grafo de PCG
Para criar um ativo no grafo de PCG, siga as etapas a seguir:
Clique com o botão direito na Gaveta de Conteúdo ou Navegador de Conteúdo, vá para Criar ativo avançado > PCG e selecione Grafo de PCG.
Escolha um nome para o novo ativo e pressione Enter.
Modelos de grafo de PCG
Após criar um grafo de PCG, você pode marcá-lo como um modelo, que pode ser selecionado no menu de contexto ao criar outros grafos. De forma semelhante aos modelos do Niagara, você pode acelerar o fluxo de trabalho usando um modelo de grafo de PCG em vez de começar com um grafo em branco.
Defina um grafo de PCG como modelo
Para definir um grafo de PCG como modelo, abra o grafo e siga estas etapas:
Na barra de ferramentas, clique no botão Configurações do Grafo para preencher o painel Detalhes com as configurações do grafo.
Navegue até "Informações do Ativo" do painel Detalhes e habilite a propriedade "É Modelo".
Agora o grafo está definido como um modelo de grafo.
Como criar um novo grafo usando um modelo
Ao criar um grafo, após escolher o nome e a posição do ativo, você poderá selecionar um modelo de grafo pela janela Criar grafo de modelo. Selecione o modelo de grafo que deseja usar e clique no botão Inicializar do modelo para criar um novo grafo usando o modelo.
Para desabilitar o prompt do modelo ao criar grafos de PCG, acesse Editar > Preferências do Editor na barra de menus. Em seguida, use a barra de pesquisa ou vá até a seção de propriedades no Editor de PCG e desabilite a propriedade Exibir seletor de modelo em Novo Grafo.
Quando essa propriedade estiver desabilitada, a janela Criar grafo de modelo não será exibida durante a criação de grafos de PCG.
Como editar o grafo de PCG
Usando o Editor de Grafos de PCG, você pode configurar e editar seus ativos do grafo de PCG. A navegação no editor é semelhante à navegação no Editor de Material ou Blueprints. Ele também contém algumas ferramentas e painéis específicos para o PCG.
| Number | Descrição |
|---|---|
1 | Barra de ferramentas |
2 | Paleta de nós |
3 | Janela de visualização |
4 | Painel “Details” |
5 | Árvore de depuração |
6 | Lista de atributos |
De maneira semelhante ao trabalho com Blueprints, você pode adicionar nós ao grafo arrastando-os para a janela de visualização a partir da paleta de nós ou usando o menu de contexto.
As alterações feitas em um grafo de PCG são atualizadas em tempo real na janela de visualização do editor quando o grafo é atribuído a um Componente de PCG e usado para gerar conteúdo.
Nós de PCG
O grafo de PCG é formado por uma série de nós de PCG, cada um realizando uma operação que contribui para o resultado final.
Esses nós são divididos nas seguintes categorias:
| Categoria | Descrição |
|---|---|
Blueprint | Contém nós relacionados a Blueprints. Isso inclui o nó comum para executar Blueprints de usuário derivados de PCGBlueprintElement. |
Fluxo de Controle | Contém nós para controlar o fluxo de lógica pelo grafo. |
Debug | Contém nós que ajudam na depuração. |
Densidade | Contém nós que afetam a densidade de pontos. |
Filtro | Contém nós que filtram dados com base em critérios ou por ponto. |
Genérico | Contém nós que afetam os dados, mas não os dados espaciais. |
Geração Hierárquica | Contém nós para controlar o modo de geração hierárquica. |
Entrada e Saída | Contém nós para carregar Alembic e outros dados externos. |
IO | Contém nós que controlam a interação com dados externos. |
Metadados | Contém nós que interagem com atributos, sejam eles pontos ou conjuntos de atributos. |
Parâmetros | Contém nós que controlam a recuperação de parâmetros de atores ou variáveis de Blueprints. |
Operações com Pontos | Contém nós que afetam os pontos e suas propriedades. |
Amostrador | Contém nós que geram pontos de uma fonte de dados espaciais, como volumes, superfícies e malhas. |
Espacial | Contém nós que criam relações espaciais entre dados, alteram seus dados internos ou recuperam dados. |
Gerador | Contém nós que criam dados ou posicionam atores em determinadas posições. |
Subgrafo | Contém nós que lidam com o uso de subgrafos. |
Como nos Blueprints, você pode adicionar comentários e nós de redirecionamento para melhorar a legibilidade do seu grafo.
Personalização de Edição de Gráfico
A edição de gráficos de PCG pode ser personalizada usando um conjunto dedicado de propriedades que você pode acessar no painel Configurações de gráfico.
Com essas propriedades, é possível personalizar o comportamento e o fluxo de trabalho do gráfico de PCG para ter uma experiência mais direcionada. Essas configurações podem então ser usadas para criar Modelos de Gráfico PCG, que podem adaptar o fluxo de trabalho do seu gráfico PCG às necessidades do seu projeto.
Filtragem de nó
Você pode usar as configurações de "filtro de nó" para filtrar seleções de nó por categoria. A filtragem é feita em uma base de inclusão ou exclusão. Para filtrar nós no menu de contexto de seleção, habilite a propriedade Filtrar nós por categoria e adicione um índice à propriedade Categorias filtradas usando o botão Adicionar (+). Depois de adicionar um índice, digite o nome da categoria no campo de texto ou use o menu suspenso para selecionar uma categoria de nó.
Alterar os filtros atualizará a seleção disponível na paleta de nó e também no menu contextual.
Filtragem de gráfico
Além de aplicar o filtro nos nós disponíveis para o gráfico, você também pode filtrar os subgráficos disponíveis. De modo semelhante à filtragem de nós, primeiro habilite a propriedade Filtrar subgráfico e, então, Adicione (+) um novo índice. Selecione o subgráfico que deseja tornar selecionável no gráfico.
Atributos e metadados
Atributos são semelhantes a variáveis e armazenam dados definidos por seu nome e tipo. Há dois tipos de atributos:
Atributos estáticos: atributos fixos e sempre presentes. Elas começam com um
$, como$Position.Atributos dinâmicos: atributos criados no tempo de execução e armazenados como parte dos metadados dos dados do grafo.
Domínios de metadados
Ao usar atributos em gráficos de PCG, considere o domínio em que os metadados estão. O domínio controlará que tipo de informação você pode salvar, assim como ela poderá ser usada e manipulada posteriormente. Para cada ponto de metadados, deve-se saber qual domínio é suportado e qual é o domínio padrão. Os domínios são prefixados por @ ao serem selecionados.
A visualização da lista de atributos tem um campo para alternar entre domínios.
Você pode usar três domínios ao trabalhar com gráficos de PCG. Primeiro, você pode usar o domínio de dados para atributos definidos para os próprios dados. O domínio de dados está restrito a valores únicos, o que significa que você não pode armazenar vários valores como conjuntos de atributos. O domínio Dados pode ser manipulado da mesma forma que os outros domínios. Você pode criar ou adicionar atributos a ele, ou manipulá-lo com operações de metadados, se o atributo tiver um prefixo @Data. Por exemplo, um atributo "MyAttr" no domínio de dados seria "@data.MyAttr". O domínio Dados é o domínio padrão para todos os outros dados espaciais, o domínio @Data é o padrão. Quando não há um domínio especificado.
O segundo domínio é o domínio de pontos usando o prefixo @Points.
O terceiro domínio é o domínio de elementos, que é usado para conjuntos de atributos e usa o prefixo @Elements.
Seletor de Atributos
Alguns nós do grafo de PCG podem ser usados para fornecer interoperabilidade entre atributos estáticos e atributos dinâmicos por meio do seletor de atributos.
O Seletor de Atributos fornece uma lista de atributos disponíveis para uso com o nó selecionado . O Seletor de Atributos usa as seguintes regras de nomenclatura:
Nomes que começam com $ são atributos estáticos, enquanto nomes sem $ são atributos dinâmicos.
@Lastrepresenta o último atributo dinâmico que foi manipulado pelo nó anterior.
Por exemplo, o nó Math é usado para realizar operações matemáticas em atributos estático e dinâmico :
Clique na imagem para ampliar.
O campo de nome do Seletor de Atributos também pode ser usado para extrair dados de componentes:
Na imagem acima, $Position.ZYX fornece o inverso dos componentes de $Position. Veja abaixo os componentes que podem ser manipulados dessa forma e seus tipos:
| Componente | Tipo |
|---|---|
Vetores | |
X, Y, Z, W, x, y, z, w | Duplo. Não pode ser mesclado com RGBA. |
R, G, B, A, r, g, b, a | Duplo. Não pode ser mesclado com XYZW. |
Length, Size | Duplo. Retorna o comprimento do vetor. |
Transformações | |
Location, Position | Vector3 |
Scale, Scale3D | Vector3 |
Rotação | Quatérnio |
Rotators | |
Pitch, Yaw, Roll | Dobrar |
Forward, Right, Up | Vector3 |
Quatérnios | |
Support Vector extractor | Vetor |
Support Rotator extractor | Rotator |
Substituições das configurações de C++
Algumas configurações estão marcadas como "PCG_Overridable" nos metadados da propriedade C++. Para nós de Blueprints, as variáveis visíveis e editáveis na instância são substituíveis.
Uma vez substituídas, os pins são adicionados automaticamente ao nó como pins avançados. Há dois tipos de pins:
Substituição global: aceita qualquer número de atributos e substitui todas as configurações para cada atributo que seja uma correspondência exata com o nome da configuração.
Substituição única: aceita qualquer número de atributos e substitui a configuração específica se um atributo for encontrado com uma correspondência exata com o nome da configuração, ou qualquer nome se houver apenas um atributo.
Os tipos de atributo precisam ser correspondentes, mas alguns tipos podem ser convertidos.
Para saber o nome ou tipo exato, use a dica no pin de substituição:
Como os domínios são específicos a cada dado, a API C++ de UPCGData tem funções para saber quais domínios são suportado e para converter entre FPCGMetadataDomainID, que é a classe interna para especificar um domínio de metadados, e FPCGAttributePropertySelector, que é o para selecionar atributos e propriedades. Cada FPGCMetadataDomain tem um conjunto próprio de atributos e entradas independentes uns dos outros. Os acessadores são atualizados para acessar o domínio correto, usando FPCGAttributePropertySelector.
Exemplo de metadados de spline
Os segmentos a seguir fornecerão alguns exemplos de configuração de fluxos de trabalho práticos de metadados de PCG.
Atributos de spline
Usando atributos, você pode manipular as propriedades dos pontos de controle. Você pode acessar a lista de propriedades de atributo usando Adicionar (+) > Spline > Pontos de controle.
| Nome | Descrição | Tipo |
|---|---|---|
$Position | Componente de localização da transformação do ponto de controle (no referencial do mundo) | Vetor |
$Rotation | Componente de rotação da transformação do ponto de controle (no referencial do mundo) | Quatérnio/ Rotator |
$Scale | Componente de escala da transformação do ponto de controle (no referencial do mundo) | Vetor |
$Transform | Transformação de mundo do ponto de controle | Transform |
$ArriveTangent | Chegada da tangente no ponto de controle | Vetor |
$LeaveTangent | Deixar tangente no ponto de controle | Vetor |
$InterpType | Tipo de interpolação nos pontos de controle para a posição (igual definido no ponto de controle da spline) | ESplinePointType |
$LocalPosition | Vetor | |
$LocalRotation | Componente de rotação da transformação do ponto de controle (no referencial da spline) | Quatérnio/ Rotator |
$LocalScale | Componente de escala da transformação do ponto de controle (no referencial da spline) | Vetor |
$LocalTransfrom | Transformação local do ponto de controle | Transform |
Dados da spline
Também é possível manipular propriedades de dados diretamente. Acesse a lista de propriedades de dados a seguir usando Adicionar (+)> Spline > Global.
| Nome | Descrição | Tipo |
|---|---|---|
@Data.$SplineTransform | Transformação da spline | FTransform |
@Data.$IsClosed | Se a spline está fechada ou não (Somente leitura) | bool |
Metadados da spline
Além das propriedades do ponto de controle, você pode adicionar atributos aos dados da spline anexados aos pontos de controle. Esses metadados serão interpolados na amostra da spline. Metadados como estes têm o mesmo comportamento dos metadados de ponto ou conjunto de atributos.
Similarmente aos pontos, você pode usar Adicionar atributo para criar um novo atributo, ou usar as operações de metadados e especificar um alvo de saída para gravar neste atributo.
Além disso, metadados em pontos de controle é o padrão para metadados de spline, mas você também pode ser explícito com @ControlPoints.
Parâmetros do grafo
De forma semelhante aos parâmetros no Editor de Material, os parâmetros de grafos de PCG são valores substituíveis criados pelo usuário e podem ajudar a criar grafos personalizáveis para diversas situações. Para criar um novo parâmetro:
Abra as configurações do grafo de PCG.
Clique no botão + ao lado de Parâmetros. Isso cria um novo parâmetro.
Clique na seta para baixo ao lado do novo parâmetro. Renomeie e selecione o tipo.
Para alterar o valor de um parâmetro em um grafo de PCG:
Altere o valor nos parâmetros do grafo ou no painel Detalhes de um ativo PCG.
Para alterar o valor de um parâmetro em uma instância de grafo de PCG:
Abra o ativo no Navegador de Conteúdo e altere o valor ou faça isso no painel Detalhes de um ativo PCG.
Instâncias de grafo
As instâncias de grafo de PCG funcionam de maneira semelhante às instâncias de material e utilizam parâmetros de grafo para ajudar a reutilizar os grafos existentes como instâncias ou subgrafos de PCG:
Para criar uma instância de grafo de PCG:
Selecione um ativo PCG no nível.
Selecione o componente PCG no painel Detalhes
Clique no botão Salvar instância para criar uma nova instância.
Nomeie a nova instância de grafo e pressione Enter.
Componente PCG
O Grafo de Nós Procedurais pode amostrar seu nível por meio do Componente PCG. Este componente contém uma instância do seu Grafo de Nós Procedurais e gerencia a geração de conteúdo procedural, tanto no editor quanto em tempo de execução. Os Componentes PCG são adicionados como um componente a um ator ou usados como parte do Volume de PCG, um volume básico útil para configurar rapidamente conteúdo procedural.
Para conectar um grafo de PCG ao Componente PCG, siga as etapas a seguir:
Na janela de visualização do editor ou no Organizador, selecione o Volume de PCG ou a classe de Blueprint que deseja conectar.
No painel Detalhes, clique no Componente PCG.
Clique no menu suspenso Grafo e selecione o grafo de nós de PCG que deseja usar.
Clique no botão Gerar para ver o resultado.
Suporte ao World Partition
Quando ativos PCG são atribuídos a uma World Partition - Camada de dados e uma Camada HLOD, o gráfico de PCG gera os atores e os atribui à mesma camada de dados e à mesma camada HLOD.
Para obter mais informações sobre como usar PCG com World Partition, consulte Como usar PCG com World Partition.
Como depurar no PCG
A depuração é uma parte essencial do fluxo de trabalho de PCG.
Cada nó tem diversas opções de depuração que você pode usar para visualizar os dados pontuais em cada etapa do grafo de PCG:
Depurar renderização
Nó "Enable / Disable"
Inspecionar
Alterne a renderização de depuração para cada nó marcando a caixa de seleção para Depurar no painel Detalhes do nó ou pressionando a tecla D.
Ative e desative cada nó marcando a caixa de seleção Habilitado no painel Detalhes do nó ou pressionando a tecla E.
Você também pode inspecionar o nó para exibir todos os pontos gerados por um nó na lista de atributos.
Selecione o componente PCG na árvore de depuração.
Clique com o botão direito no nó que deseja inspecionar.
Selecione Inspecionar. Como alternativa, você pode pressionar a tecla A.
Como criar um volume de floresta simples
Um caso de uso comum das ferramentas de geração procedural é a geração de biomas em um ambiente de mundo aberto.
Para criar um gerador de bioma de floresta básico, siga as etapas abaixo.
Esta amostra usa materiais e malhas estáticas da coleção Megascans Trees: European Hornbeam baixada usando Fab.
Crie o nível
Crie um novo projeto na Unreal Engine.
Crie um novo nível usando o modelo de nível Básico. Salve seu nível.
Exclua a malha estática Chão e adicione uma nova Paisagem ao nível usando o modo Paisagem.
Adicione variações à Paisagem usando as ferramentas de modelagem.
Criar o volume de PCG
Volte ao modo de seleção e habilite a janela Posicionar atores, se ela não estiver visível no momento.
Use a caixa Pesquisar classes para encontrar o Volume de PCG e adicioná-lo ao nível.
Defina a escala do volume de PCG para X=8.0, Y=8.0, Z=8.0
Como criar o ativo no grafo de PCG
Clique com o botão direito na Gaveta de Conteúdo ou Navegador de Conteúdo, vá para Criar ativo avançado > PCG e selecione Grafo de PCG.
Nomeie o novo ativo como PCG_ForestGen e pressione Enter.
Clique duas vezes em PCG_ForestGen para abrir o Editor de Grafo de PCG.
Conecte o Componente PCG
Na janela de visualização do editor ou Organizador, selecione o Volume de PCG.
No painel Detalhes, clique no Componente PCG.
Clique no menu suspenso Grafo e selecione PCG_ForestGen na lista.
Crie os pontos
Na janela do Editor de Grafos de PCG, adicione um nó Get Landscape Data ao grafo.
Arraste da saída de Get Landscape Data e adicione um nó Surface Sampler.
Selecione o Surface Sampler e pressione a tecla D para ativar/desativar a renderização de depuração.
De volta à janela do editor, selecione o volume de PCG e clique no botão Gerar no painel Detalhes.
Agora você pode ver os pontos sendo gerados na janela de visualização do Editor. Os pontos se adaptam ao formato da Paisagem.
Adicione variação
No Editor de Grafos de PCG, selecione Surface Sampler.
Adicione mais pontos ajustando as propriedades Pontos por metro quadrado, Extensões de pontos e Folga no painel Detalhes.
Ajuste Pontos por metro quadrado para 0.15 para adicionar mais pontos ao espaço.
A propriedade Extensões de pontos controla o tamanho dos limites de cada ponto. Altere os valores de X, Y e Z para 50.
A propriedade Folga determina o quão rigidamente os pontos gerados se ajustam a uma forma de grade. Deixe o valor de Folga em 1.0.
Em seguida, adicione um nó Transform Points. Este nó adiciona alterações adicionais de movimento, rotação e escala aos seus pontos com um intervalo definido. Conecte o pin de saída do nó Surface Sampler ao pin de entrada do nó Transform Points.
Desabilite "Depurar renderização" no nó "Surface Sampler" e habilite no nó "Transform Points".
Para adicionar alguma variação de rotação, altere o valor Z de Rotação Máxima para 360. Isso dá a todos os pontos uma rotação aleatória entre 0 e 360 graus.
O grafo de PCG gera pontos de surgimento e os gira para ajustá-los à direção normal da Paisagem. Desabilite essa rotação extra marcando a caixa de seleção de Rotação Absoluta.
Para adicionar uma variação de tamanho, defina os valores de X, Y e Z de Escala Mínima como 0.5. Altere os valores de X, Y e Z Escala Máxima para 1.2.
O resultado final é um conjunto de pontos com uma boa quantidade de variação.
Gere as malhas estáticas
No Editor de Grafos de PCG, adicione um nó Static Mesh Spawner à janela de visualização do grafo. Conecte o pin de Saída do nó Transform Points ao pin de Entrada do Static Mesh Spawner.
Selecione o Static Mesh Spawner
No painel Detalhes, encontre a opção Entradas de Malha e clique no botão + para adicionar uma malha estática para gerar.
Clique na seta para baixo ao lado de Entradas de Malha para abrir a matriz.
Clique na seta para baixo ao lado de Índice [0].
Clique na seta para baixo ao lado de Descritor.
Clique no menu suspenso de Malha Estática e selecione a árvore que deseja gerar. Este exemplo usa SM_EuropeanHornbeam_Forest_01.
Você pode adicionar outras malhas estáticas e equilibrar a variedade usando a propriedade Peso para cada entrada de malha na matriz. A Unreal Engine adiciona o valor do peso de todas as entradas de malhas estáticas e divide esse número por cada peso individual para determinar a probabilidade de surgimento de cada entrada.